home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 6 / CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso / cucd / online / fidonetts / gc0165.exe / GC0165.DOC (.txt) next >
Word Document  |  1995-01-23  |  470KB  |  5,468 lines

  1.  
  2. |Microsoft® MS-DOS®, Windows(, OS/2®, and Apple®        | |[pic]®                |
  3. |Macintosh® Applications                                | |                      |
  4. |Version:  |RTF Version 1.3                             |Product Support       |
  5. |          |                                            |Services              |
  6. |Subject:  |Rich Text Format (RTF) Specification and    |Application Note      |
  7. |          |Sample RTF Reader Program                   |                      |
  8. |Contents: |92 Pages, 1 Disk                            |1/95  GC0165          |
  9.  
  10.  INFORMATION PROVIDED IN THIS DOCUMENT AND ANY SOFTWARE THAT MAY ACCOMPANY
  11.  THIS DOCUMENT (collectively referred to as an Application Note) IS PROVIDED
  12.  "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
  13.  INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY
  14.  AND/OR FITNESS FOR A PARTICULAR PURPOSE. The user assumes the entire risk
  15.  as to the accuracy and the use of this Application Note. This Application
  16.  Note may be copied and distributed subject to the following conditions:  1)
  17.  All text must be copied without modification and all pages must be
  18.  included;  2) If software is included, all files on the disk(s) must be
  19.  copied without modification (the MS-DOS  utility diskcopy is appropriate
  20.  for this purpose);  3) All components of this Application Note must be
  21.  distributed together;  and  4) This Application Note may not be distributed
  22.  for profit.
  23.  
  24.      Copyright Â© 1989-1995 Microsoft Corporation.  All Rights Reserved.
  25.  
  26.     Microsoft, MS, MS-DOS, and Windows and are registered trademarks and
  27.              Windows NT is a trademark of Microsoft Corporation.
  28.          PostScript is a registered trademark of Adobe Systems, Inc.
  29.  Apple, Macintosh, and TrueType are registered trademarks and QuickDraw is a
  30.                       trademark of Apple Computer, Inc.
  31.  IBM, OS/2, and Personal System/2 are registered trademarks of International
  32.                        Business Machines Corporation.
  33.     ITC Zapf Chancery is a registered trademark of International Typeface
  34.                                 Corporation.
  35.    Palatino is a registered trademark of Linotype AG and its subsidiaries.
  36.    Arial, Courier New and Times New Roman are registered trademarks of The
  37.                           Monotype Corporation PLC.
  38.               Unicode is a trademark of Unicode, Incorporated.
  39.  
  40.          This document was created using Microsoft Word for Windows.
  41.  
  42.  
  43.  
  44.                               Table of Contents
  45.  
  46.  
  47. INTRODUCTION 3
  48. RTF SYNTAX 3
  49. CONVENTIONS OF AN RTF READER 4
  50. FORMAL SYNTAX 6
  51. CONTENTS OF AN RTF FILE 6
  52.    Header 7
  53.        RTF Version 7
  54.        Character Set 7
  55.        Font Table 7
  56.           Font Embedding 9
  57.           Code Page Support 9
  58.        File Table 10
  59.        Color Table 11
  60.        Style Sheet 11
  61.        Revision Marks 13
  62.    Document Area 13
  63.        Information Group 13
  64.        Document Formatting Properties 15
  65.        Section Text 18
  66.           Section Formatting Properties 19
  67.           Headers and Footers 21
  68.        Paragraph Text 22
  69.           Paragraph Formatting Properties 22
  70.           Tabs 23
  71.           Bullets and Numbering 24
  72.           Paragraph Borders 26
  73.           Paragraph Shading 27
  74.           Positioned Objects and Frames 27
  75.           Table Definitions 29
  76.        Character Text 32
  77.           Character Formatting Properties 32
  78.           Associated Character Properties 35
  79.           Special Characters 36
  80.        Bookmarks 38
  81.        Pictures 38
  82.        Objects 41
  83.           Macintosh Edition Manager Publisher Objects 43
  84.        Drawing Objects 44
  85.        Footnotes 49
  86.        Annotations 50
  87.        Fields 51
  88.        Index Entries 52
  89.        Table of Contents Entries 52
  90.        Bidirectional Language Support 53
  91.  
  92. APPENDIX A: SAMPLE RTF READER APPLICATION 55
  93.    How to Write an RTF Reader 55
  94.    A Sample RTF Reader Implementation 56
  95.        RTFDECL.H and RTFREADR.C 56
  96.        RTFTYPE.H 56
  97.        The RTFACTN.C File 58
  98.    Notes on Implementing Other RTF Features 59
  99.        Tabs and Other Control Sequences Terminating in a Fixed Control 59
  100.        Borders and Other Control Sequences Beginning with a Fixed Control 59
  101.    Other Problem Areas in RTF 59
  102.        Style Sheets 59
  103.        Property Changes 59
  104.        Fields 59
  105.        Tables 60
  106.    Appendix A-1: Listings 61
  107.        RTFDECL.H 61
  108.        RTFTYPE.H 61
  109.        RTFREADR.C 62
  110.        RTFACTN.C 66
  111.        MAKEFILE 71
  112.  
  113. APPENDIX B: WORD 6J RICH TEXT FORMAT ADDENDUM 73
  114.  
  115. APPENDIX C: INDEX OF RTF CONTROL WORDS 79
  116.  
  117.  
  118. Introduction
  119.  
  120. The Rich Text Format (RTF) Specification is a method of encoding formatted
  121. text and graphics for easy transfer between applications. Currently, users
  122. depend on special translation software to move word-processing documents
  123. between different MS-DOS, Windows, OS/2, and Apple Macintosh applications.
  124.  
  125. The RTF Specification provides a format for text and graphics interchange
  126. that can be used with different output devices, operating environments, and
  127. operating systems. RTF uses the ANSI, PC-8, Macintosh, or IBM® PC character
  128. set to control the representation and formatting of a document, both on the
  129. screen and in print. With the RTF Specification, documents created under
  130. different operating systems and with different software applications can be
  131. transferred between those operating systems and applications.
  132.  
  133. Software that takes a formatted file and turns it into an RTF file is
  134. called a writer. An RTF writer separates the application's control
  135. information from the actual text and writes a new file containing the text
  136. and the RTF groups associated with that text. Software that translates an
  137. RTF file into a formatted file is called a reader.
  138.  
  139. Included with the RTF specification is a sample RTF reader application (see
  140. "Appendix A: Sample RTF Reader Application" beginning on page 55). It is
  141. designed for use with the specification to assist those users developing
  142. their own RTF readers. The GC0165 disk included with this Application Note
  143. contains RTFREADR.EXE, the sample RTF reader program itself. This file and
  144. its use are described in Appendix A. The sample RTF reader is not a for-
  145. sale product, and Microsoft does not provide technical or any other type of
  146. support for the sample RTF reader code or the RTF specification.
  147.  
  148.  
  149. RTF Syntax
  150.  
  151. An RTF file consists of unformatted text, control words, control symbols,
  152. and groups. For ease of transport, a standard RTF file can consist of only
  153. 7-bit ASCII characters. (Converters that communicate with Microsoft Word
  154. for Windows or Microsoft Word for the Macintosh should expect 8-bit
  155. characters.)
  156.  
  157. A control word is a specially formatted command that RTF uses to mark
  158. printer control codes and information that applications use to manage
  159. documents. A control word takes the following form:
  160.  
  161.   \ LetterSequence<Delimiter>
  162.  
  163. Note that a backslash begins each control word.
  164.  
  165. The LetterSequence is made up of lowercase alphabetic characters between
  166. "a" and "z" inclusive. RTF is case sensitive, and all RTF control words
  167. must be in lowercase.
  168.  
  169. The Delimiter marks the end of an RTF control word, and can be one of the
  170. following:
  171.  
  172. · A space. In this case, the space is part of the control word.
  173.  
  174. · A digit or a hyphen (-), which indicates that a numeric parameter
  175.    follows. The subsequent digital sequence is then delimited by a space or
  176.    any character other than a letter or a digit. The parameter can be a
  177.    positive or a negative number. The range of the values for the number is
  178.    â€“32767 through 32767. However, Microsoft Word for Windows, Word for OS/2,
  179.    and Word for the Macintosh restrict the range to â€“31680 through 31680. If
  180.    a numeric parameter immediately follows the control word, this parameter
  181.    becomes part of the control word. The control word is then delimited by a
  182.    space or a nonalphabetic or nonnumeric character in the same manner as
  183.    any other control word.
  184.  
  185. · Any character other than a letter or a digit. In this case, the
  186.    delimiting character terminates the control word but is not actually part
  187.    of the control word.
  188.  
  189. If a space delimits the control word, the space does not appear in the
  190. document. Any characters following the delimiter, including spaces, will
  191. appear in the document. For this reason, you should use spaces only where
  192. necessary; do not use spaces merely to break up RTF code.
  193.  
  194. A control symbol consists of a backslash followed by a single,
  195. nonalphabetic character. For example, \ ~ represents a nonbreaking space.
  196. Control symbols take no delimiters.
  197.  
  198. A group consists of text and control words or control symbols enclosed in
  199. braces ({ }). The opening brace ({ ) indicates the start of the group and
  200. the closing brace ( }) indicates the end of the group. Each group specifies
  201. the text affected by the group and the different attributes of that text.
  202. The RTF file can also include groups for fonts, styles, screen color,
  203. pictures, footnotes, annotations, headers and footers, summary information,
  204. fields, and bookmarks, as well as document-, section-, paragraph-, and
  205. character-formatting properties. If the font, file, style, screen-color,
  206. revision mark, and summary-information groups and document-formatting
  207. properties are included, they must precede the first plain-text character
  208. in the document. These groups form the RTF file header. If the group for
  209. fonts is included, it should precede the group for styles. If any group is
  210. not used, it can be omitted. The groups are discussed in the following
  211. sections.
  212.  
  213. The control properties of certain control words (such as bold, italic, keep
  214. together, and so forth) have only two states. When such a control word has
  215. no parameter or has a nonzero parameter, it is assumed that the control
  216. word turns on the property. When such a control word has a parameter of 0
  217. (zero), it is assumed that the control word turns off the property. For
  218. example, \ b turns on bold, whereas \ b0 turns off bold.
  219.  
  220. Certain control words, referred to as destinations, mark the beginning of a
  221. collection of related text that could appear at another position, or
  222. destination, within the document. Destinations may also be text that is
  223. used but should not appear within the document at all. An example of a
  224. destination is the \ footnote group, where the footnote text follows the
  225. control word. Destination control words and their following text must be
  226. enclosed in braces. Destinations added after the RTF Specification
  227. published in the March 1987 Microsoft Systems Journal may be preceded by
  228. the control symbol \ *. This control symbol identifies destinations whose
  229. related text should be ignored if the RTF reader does not recognize the
  230. destination. (RTF writers should follow the convention of using this
  231. control symbol when adding new destinations or groups.) Destinations whose
  232. related text should be inserted into the document even if the RTF reader
  233. does not recognize the destination should not use \ *. All destinations
  234. that were not included in the March 1987 revision of the RTF Specification
  235. are shown with \ * as part of the control word.
  236.  
  237. Formatting specified within a group affects only the text within that
  238. group. Generally, text within a group inherits the formatting of the text
  239. in the preceding group. However, Microsoft implementations of RTF assume
  240. that the footnote, annotation, header, and footer groups (described later
  241. in this chapter) do not inherit the formatting of the preceding text.
  242. Therefore, to ensure that these groups are always formatted correctly, you
  243. should set the formatting within these groups to the default with the
  244. \ sectd, \ pard, and \ plain control words, and then add any desired
  245. formatting.
  246.  
  247. The control words, control symbols, and braces constitute control
  248. information. All other characters in the file are plain text. Here is an
  249. example of plain text that does not exist within a group:
  250.  
  251.    {\rtf\ansi\deff0{\fonttbl{\f0\froman Tms Rmn;}{\f1\fdecor
  252.    Symbol;}{\f2\fswiss Helv;}}{\colortbl;\red0\green0\blue0;
  253.    \red0\green0\blue255;\red0\green255\blue255;\red0\green255\
  254.    blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\
  255.    green255\blue0;\red255\green255\blue255;}{\stylesheet{\fs20
  256.    \snext0Normal;}}{\info{\author John Doe}
  257.    {\creatim\yr1990\mo7\dy30\hr10\min48}{\version1}{\edmins0}
  258.    {\nofpages1}{\nofwords0}{\nofchars0}{\vern8351}}\widoctrl\ftnbj
  259.    \sectd\linex0\endnhere \pard\plain \fs20 This is plain text.\par}
  260.  
  261.  
  262. The phrase â€œThis is plain text” is not part of a group and is treated as
  263. document text.
  264.  
  265. As previously mentioned, the backslash ( \ ) and braces ({ }) have special
  266. meaning in RTF. To use these characters as text, precede them with a
  267. backslash, as in \\ , \ {, and \}.
  268.  
  269.  
  270. Conventions of an RTF Reader
  271.  
  272. The reader of an RTF stream is concerned with the following:
  273.  
  274. · Separating control information from plain text.
  275.  
  276. · Acting on control information.
  277.  
  278. · Collecting and properly inserting text into the document, as directed by
  279.    the current group state.
  280.  
  281. Acting on control information is designed to be a relatively simple
  282. process. Some control information simply contributes special characters to
  283. the plain text stream. Other information serves to change the program
  284. state, which includes properties of the document as a whole, or to change
  285. any of a collection of group states, which apply to parts of the document.
  286.  
  287. As previously mentioned, a group state can specify the following:
  288.  
  289. · The destination, or part of the document that the plain text is
  290.    constructing.
  291.  
  292. · Character-formatting properties, such as bold or italic.
  293.  
  294. · Paragraph-formatting properties, such as justified or centered.
  295.  
  296. · Section-formatting properties, such as the number of columns.
  297.  
  298. · Table-formatting properties, which define the number of cells and
  299.    dimensions of a table row.
  300.  
  301. In practice, an RTF reader will evaluate each character it reads in
  302. sequence as follows:
  303.  
  304. · If the character is an opening brace ({), the reader stores its current
  305.    state on the stack. If the character is a closing brace (}), the reader
  306.    retrieves the current state from the stack.
  307.  
  308. · If the character is a backslash (\), the reader collects the control word
  309.    or control symbol and its parameter, if any, and looks up the control
  310.    word or control symbol in a table that maps control words to actions. It
  311.    then carries out the action prescribed in the table. (The possible
  312.    actions are discussed below.) The read pointer is left before or after a
  313.    control-word delimiter, as appropriate.
  314.  
  315. · If the character is anything other than an opening brace ({), closing
  316.    brace (}), or backslash (\) , the reader assumes that the character is
  317.    plain text and writes the character to the current destination using the
  318.    current formatting properties.
  319.  
  320. If the RTF reader cannot find a particular control word or control symbol
  321. in the look-up table described above, the control word or control symbol
  322. should be ignored. If a control word or control symbol is preceded by an
  323. opening brace ({), it is part of a group. The current state should be saved
  324. on the stack, but no state change should occur. When a closing brace (}) is
  325. encountered, the current state should be retrieved from the stack, thereby
  326. resetting the current state. If the \ * control symbol precedes a control
  327. word, then it defines a destination group and was itself preceded by an
  328. opening brace ({). The RTF reader should discard all text up to and
  329. including the closing brace (}) that closes this group. All RTF readers
  330. must recognize all destinations defined in the March 1987 RTF
  331. Specification. The reader may skip past the group, but it is not allowed to
  332. simply discard the control word. Destinations defined since March 1987 are
  333. marked with the \* control symbol.
  334.  
  335.    Note: All RTF readers must implement the \* control symbol so that they
  336.    can read RTF files written by newer RTF writers.
  337.  
  338. For control words or control symbols that the RTF reader can find in the
  339. look-up table, the possible actions are as follows.
  340.  
  341. |Action                |Description                                         |
  342. |Change Destination    |The RTF reader changes the destination to the       |
  343. |                      |destination described in the table entry.           |
  344. |                      |Destination changes are legal only immediately after|
  345. |                      |an opening brace ({ ). (Other restrictions may also |
  346. |                      |apply; for example, footnotes cannot be nested.)    |
  347. |                      |Many destination changes imply that the current     |
  348. |                      |property settings will be reset to their default    |
  349. |                      |settings. Examples of control words that change     |
  350. |                      |destination are \ footnote, \ header, \ footer,     |
  351. |                      |\ pict, \ info, \ fonttbl, \ stylesheet, and        |
  352. |                      |\ colortbl. This Application Note identifies all    |
  353. |                      |destination control words where they appear in      |
  354. |                      |control-word tables.                                |
  355. |Change Formatting     |The RTF reader changes the property as described in |
  356. |Property              |the table entry. The entry will specify whether a   |
  357. |                      |parameter is required. The â€œAPPENDIX C: INDEX OF RTF|
  358. |                      |CONTROL WORDS” section at the end of this           |
  359. |                      |Application Note also specifies which control words |
  360. |                      |require parameters. If a parameter is needed and not|
  361. |                      |specified, then a default value will be used. The   |
  362. |                      |default value used depends on  the control word. If |
  363. |                      |the control word does not specify a default, then   |
  364. |                      |all RTF readers should assume a default of 0.       |
  365. |Insert Special        |The reader inserts into the document the character  |
  366. |Character             |code or codes described in the table entry.         |
  367. |Insert Special        |The reader inserts into the document the character  |
  368. |Character and Perform |code or codes described in the table entry and      |
  369. |Action                |performs whatever other action the entry specifies. |
  370. |                      |For example, when Microsoft Word interprets \ par, a|
  371. |                      |paragraph mark is inserted in the document and      |
  372. |                      |special code is run to record the paragraph         |
  373. |                      |properties belonging to that paragraph mark.        |
  374.  
  375.  
  376. Formal Syntax
  377.  
  378. This Application Note describes RTF using the following syntax, based on
  379. Backus-Naur Form.
  380.  
  381. |Syntax       |Meaning                                                      |
  382. |#PCDATA      |Text (without control words).                                |
  383. |#SDATA       |Hexadecimal data.                                            |
  384. |#BDATA       |Binary data.                                                 |
  385. |'c'          |A literal.                                                   |
  386. |<text>       |A nonterminal.                                               |
  387. |a            |The (terminal) control word a, without a parameter.          |
  388. |a  or aN     |The (terminal) control word a, with a parameter.             |
  389. |a?           |Item a is optional.                                          |
  390. |a+           |One or more repetitions of item a.                           |
  391. |a*           |Zero or more repetitions of item a.                          |
  392. |a b          |Item a followed by item b.                                   |
  393. |a | b        |Item a or item b.                                            |
  394. |a & b        |Item a and/or item b, in any order.                          |
  395.  
  396.  
  397. Contents of an RTF File
  398.  
  399. An RTF file has the following syntax:
  400.  
  401. |<File>       |'{' <header> <document>'}'                                   |
  402.  
  403.  
  404. This syntax is the standard RTF syntax; any RTF reader must be able to
  405. correctly interpret RTF written to this syntax. It is worth mentioning
  406. again that RTF readers do not have to use all control words, but they must
  407. be able to harmlessly ignore unknown (or unused) control words, and they
  408. must correctly skip over destinations marked with the \* control symbol.
  409. There may, however, be RTF writers that generate RTF that does not conform
  410. to this syntax, and as such, RTF readers should be robust enough to handle
  411. some minor variations. Nonetheless, if an RTF writer generates RTF
  412. conforming to this specification, then any correct RTF reader should be
  413. able to interpret it.
  414.  
  415.  
  416. Header
  417.  
  418. The header has the following syntax:
  419.  
  420. |<header>     |\ rtf <charset> \ deff? <fonttbl> <filetbl>? <colortbl>?     |
  421. |             |<stylesheet>? <revtbl>?                                      |
  422.  
  423.  
  424. RTF Version
  425.  
  426. An entire RTF file is considered a group and must be enclosed in braces.
  427. The control word \ rtfN must follow the opening brace. The numeric
  428. parameter N identifies the major version of the RTF Specification used. The
  429. RTF standard described in this Application Note, although titled as version
  430. 1.2, continues to correspond syntactically to RTF Specification Version 1.
  431. Therefore, the numeric parameter N for the \rtf control word should still
  432. be emitted as 1.
  433.  
  434.  
  435. Character Set
  436.  
  437. After specifying the RTF version, you must declare the character set used
  438. in this document. The control word for the character set must precede any
  439. plain text or any table control words. The RTF Specification currently
  440. supports the following character sets.
  441.  
  442. |Control word |Character set                                                |
  443. |\ ansi       |ANSI (the default)                                           |
  444. |\ mac        |Apple Macintosh                                              |
  445. |\ pc         |IBM PC code page 437                                         |
  446. |\ pca        |IBM PC code page 850, used by IBM Personal System/2® (not    |
  447. |             |implemented in version 1 of Microsoft Word for OS/2)         |
  448.  
  449.  
  450. Font Table
  451.  
  452. The \ fonttbl control word introduces the font table group. Unique \fN
  453. control words define each font available in the document, and are used to
  454. reference that font throughout the document. This group has the following
  455. syntax:
  456.  
  457. |<fonttbl>    |'{' \ fonttbl (<fontinfo> | ('{' <fontinfo> '}'))+  '}'      |
  458. |<fontinfo>   |<fontnum><fontfamily><fcharset>?<fprq>?<fontemb>?<codepage>? |
  459. |             |<fontname><fontaltname>? ';'                                 |
  460. |<fontnum>    |\ f                                                          |
  461. |<fontfamily> |\ fnil | \ froman | \ fswiss | \ fmodern | \ fscript |       |
  462. |             |\ fdecor | \ ftech | \ fbidi                                 |
  463. |<fcharset>   |\ fcharset                                                   |
  464. |<fprq>       |\ fprq                                                       |
  465. |<fontname>   |#PCDATA                                                      |
  466. |<fontaltname>|'{\*' \falt #PCDATA '}'                                      |
  467. |<fontemb>    |'{\ *' \ fontemb <fonttype> <fontfname>? <data>? '}'         |
  468. |<fonttype>   |\ ftnil | \ fttruetype                                       |
  469. |<fontfname>  |'{\ *' \ fontfile <codepage>? #PCDATA '}'                    |
  470. |<codepage>   |\ cpg                                                        |
  471.  
  472.  
  473. Note for <fontemb> that either <fontfname> or <data> must be present,
  474. although both may be present.
  475.  
  476. All fonts available to the RTF writer can be included in the font table,
  477. even if the document doesn't use all the fonts.
  478.  
  479. RTF also supports font families, so that applications can attempt to
  480. intelligently choose fonts if the exact font is not present on the reading
  481. system. RTF uses the following control words to describe the various font
  482. families.
  483.  
  484. |Control word |Font family                      |Examples                |
  485. |\ fnil       |Unknown or default fonts (the    |                        |
  486. |             |default)                         |                        |
  487. |\ froman     |Roman, proportionally spaced     |Times New Roman®,       |
  488. |             |serif fonts                      |Palatino®               |
  489. |\ fswiss     |Swiss, proportionally spaced sans|Arial®                  |
  490. |             |serif fonts                      |                        |
  491. |\ fmodern    |Fixed-pitch serif and sans serif |Courier New®, Pica      |
  492. |             |fonts                            |                        |
  493. |\ fscript    |Script fonts                     |Cursive                 |
  494. |\ fdecor     |Decorative fonts                 |Old English, ITC Zapf   |
  495. |             |                                 |Chancery®               |
  496. |\ ftech      |Technical, symbol, and           |Symbol                  |
  497. |             |mathematical fonts               |                        |
  498. |\ fbidi      |Arabic, Hebrew, or other         |Miriam                  |
  499. |             |bidirectional font               |                        |
  500.  
  501.  
  502. If an RTF file uses a default font, the default font number is specified
  503. with the \ deffN control word, which must precede the font-table group. The
  504. RTF writer supplies the default font number used in the creation of the
  505. document as the numeric argument N. The RTF reader then translates this
  506. number through the font table into the most similar font available on the
  507. reader's system.
  508.  
  509. The following control words specify the character set, alternative font
  510. name and pitch of a font in the font table.
  511.  
  512. |Control word |Definition                                                   |
  513. |\ fcharsetN  |Specifies the character set of a font in the font table.     |
  514. |\falt        |Indicates alternate font name to use if the specified font in|
  515. |             |the font table is not available.  '{\*' \falt <Alternate Font|
  516. |             |Name>'}'                                                     |
  517. |\ fprqN      |Specifies the pitch of a font in the font table.             |
  518.  
  519.  
  520. If \fcharset is specified, the N argument can be one of the following
  521. types.
  522.  
  523. |Character set              |N Value                                        |
  524. |ANSI_CHARSET               |0                                              |
  525. |SYMBOL_CHARSET             |2                                              |
  526. |SHIFTJIS_CHARSET           |128                                            |
  527. |GREEK_CHARSET              |161                                            |
  528. |TURKISH_CHARSET            |162                                            |
  529. |HEBREW_CHARSET             |177                                            |
  530. |ARABICSIMPLIFIED_CHARSET   |178                                            |
  531. |ARABICTRADITIONAL_CHARSET  |179                                            |
  532. |ARABICUSER_CHARSET         |180                                            |
  533. |HEBREWUSER_CHARSET         |181                                            |
  534. |CYRILLIC_CHARSET           |204                                            |
  535. |EASTERNEUROPE_CHARSET      |238                                            |
  536. |PC437_CHARSET              |254                                            |
  537. |OEM_CHARSET                |255                                            |
  538.  
  539.  
  540. If \fprq is specified, the N argument can be one of the following values.
  541.  
  542. |Pitch        |Value                                                        |
  543. |Default pitch|0                                                            |
  544. |Fixed pitch  |1                                                            |
  545. |Variable     |2                                                            |
  546. |pitch        |                                                             |
  547.  
  548.  
  549. Font Embedding
  550.  
  551. RTF supports embedded fonts with the \ fontemb group located inside a font
  552. definition. An embedded font can be specified by a filename, or the actual
  553. font data may be located inside the group. If a filename is specified, it
  554. is contained in the \ fontfile group. The \ cpg control word can be used to
  555. specify the character set for the filename.
  556.  
  557. RTF supports TrueType( and other embedded fonts. The type of the embedded
  558. font is described by the following control words.
  559.  
  560. |Control word |Embedded font type                                           |
  561. |\ ftnil      |Unknown or default font type (the default)                   |
  562. |\ fttruetype |TrueType font                                                |
  563.  
  564.  
  565. Code Page Support
  566.  
  567. A font may have a different character set from the character set of the
  568. document. For example, the Symbol font has the same characters in the same
  569. positions both on the Macintosh and in Windows. RTF describes this with the
  570. \ cpg control word, which names the character set used by the font. In
  571. addition, filenames (used in field instructions and in embedded fonts) may
  572. not necessarily be the same as the character set of the document; the \ cpg
  573. control word can change the character set for these filenames as well.
  574. However, all RTF documents must still declare a character set (that is,
  575. \ansi, \mac, \pc, or \pca) to maintain backwards compatibility with earlier
  576. RTF readers.
  577.  
  578. The table below describes valid values for \ cpg.
  579.  
  580. |Value        |Description                                                  |
  581. |437          |United States IBM                                            |
  582. |708          |Arabic (ASMO 708)                                            |
  583. |709          |Arabic (ASMO 449+, BCON V4)                                  |
  584. |710          |Arabic (transparent Arabic)                                  |
  585. |711          |Arabic (Nafitha Enhanced)                                    |
  586. |720          |Arabic (transparent ASMO)                                    |
  587. |819          |Windows 3.1 (United States and Western Europe)               |
  588. |850          |IBM multilingual                                             |
  589. |852          |Eastern European                                             |
  590. |860          |Portuguese                                                   |
  591. |862          |Hebrew                                                       |
  592. |863          |French Canadian                                              |
  593. |864          |Arabic                                                       |
  594. |865          |Norwegian                                                    |
  595. |866          |Soviet Union                                                 |
  596. |932          |Japanese                                                     |
  597. |1250         |Windows 3.1 (Eastern European)                               |
  598. |1251         |Windows 3.1 (Cyrillic)                                       |
  599.  
  600.  
  601. File Table
  602.  
  603. The \ filetbl control word introduces the file table destination. This
  604. group defines the files referenced in the document and has the following
  605. syntax:
  606.  
  607. |<filetbl>    |'{\ *'  \ filetbl ('{' <fileinfo> '}')+  '}'                 |
  608. |<fileinfo>   |\ file <filenum><relpath>?<osnum>? <filesource>+ <filename>  |
  609. |<filenum>    | \ fid                                                       |
  610. |<relpath>    |\ frelative                                                  |
  611. |<osnum>      |\ fosnum                                                     |
  612. |<filesource> | \ fvalidmac | \ fvaliddos | \ fvalidntfs | \ fvalidhpfs |   |
  613. |             |\ fnetwork                                                   |
  614. |<filename>   |#PCDATA                                                      |
  615.  
  616.  
  617. Note that the filename can be any valid alphanumeric string for the named
  618. file system, indicating the complete path and filename.
  619.  
  620. |Control word |Definition                                                   |
  621. |\ filetbl    |A list of documents referenced by the current document. The  |
  622. |             |file table has a structure analogous to the style or font    |
  623. |             |table. This is a destination control word output as part of  |
  624. |             |the document header.                                         |
  625. |\ file       |Marks the beginning of a file group, which lists relevant    |
  626. |             |information about the referenced file. This is a destination |
  627. |             |control word.                                                |
  628. |\ fidN       |File ID number. Files are referenced later in the document   |
  629. |             |using this number.                                           |
  630. |\ frelativeN |The character position within the path (starting at 0 [zero])|
  631. |             |where the referenced file's path starts to be relative to the|
  632. |             |path of the owning document. For example, a document is saved|
  633. |             |to the path C:\ PRIVATE\ RESUME\ FILE1.DOC and its file table|
  634. |             |contains the path C:\ PRIVATE\ RESUME\ EDU\ FILE2.DOC, then  |
  635. |             |that entry in the file table will be \ frelative18, to point |
  636. |             |at the character "e" in "edu". This allows preservation of   |
  637. |             |relative paths.                                              |
  638. |\ fosnumN    |Currently only filled in for paths from the Macintosh file   |
  639. |             |system. It is an operating-system-specific number for        |
  640. |             |identifying the file, which may be used to speed up access to|
  641. |             |the file, or find it if the file has been moved to another   |
  642. |             |folder or disk. The Macintosh operating system name for this |
  643. |             |number is the "file id." Additional meanings of the \ fosnumN|
  644. |             |control word may be defined for other file systems in the    |
  645. |             |future.                                                      |
  646. |\ fvalidmac  |Macintosh file system.                                       |
  647. |\ fvaliddos  |MS-DOS file system.                                          |
  648. |\ fvalidntfs |NTFS file system.                                            |
  649. |\ fvalidhpfs |HPFS file system.                                            |
  650. |\ fnetwork   |Network file system. This control word may be used in        |
  651. |             |conjunction with any of the previous file source control     |
  652. |             |words.                                                       |
  653.  
  654.  
  655. Color Table
  656.  
  657. The \ colortbl control word introduces the color table group, which defines
  658. screen colors, character colors, and other color information. This group
  659. has the following syntax:
  660.  
  661. |<colortbl>   |'{' \ colortbl <colordef>+ '}'                               |
  662. |<colordef>   |\ red ? & \ green ? & \ blue ? ';'                           |
  663.  
  664.  
  665. The following are valid control words for this group.
  666.  
  667. |Control word |Meaning                                                      |
  668. |\ redN       |Red index                                                    |
  669. |\ greenN     |Green index                                                  |
  670. |\ blueN      |Blue index                                                   |
  671.  
  672.  
  673. Each definition must be delimited by a semicolon, even if the definition is
  674. omitted. If a color definition is omitted, the RTF reader uses its default
  675. color. In the example below, three colors are defined. The first color is
  676. omitted, as shown by the semicolon following the \ colortbl control word.
  677.  
  678.    {\colortbl;\red0\green0\blue0;\red0\green0\blue255;}
  679.  
  680.  
  681. The foreground and background colors use indexes into the color table to
  682. define a color. For more information on color setup, see your Windows
  683. documentation.
  684.  
  685. The following example defines a block of text in color (where supported).
  686. Note that the cf/cb index is the index of an entry in the color table,
  687. which represents a red/green/blue color combination.
  688.  
  689.    {\f1\cb1\cf2 This is colored text. The background is color
  690.    1 and the foreground is color 2.}
  691.  
  692.  
  693. If the file is translated for software that does not display color, the
  694. reader ignores the color-table group.
  695.  
  696.  
  697. Style Sheet
  698.  
  699. The \ stylesheet control word introduces the style sheet group, which
  700. contains definitions and descriptions of the various styles used in the
  701. document. All styles in the document's style sheet can be included, even if
  702. not all the styles are used. In RTF, a style is a form of shorthand used to
  703. specify a set of character, paragraph, or section formatting.
  704.  
  705. The style-sheet group has the following syntax:
  706.  
  707. |<stylesheet> |'{' \ stylesheet <style>+ '}'                                |
  708. |<style>      |'{' <styledef>?<keycode>? <formatting> <additive>? <based>?  |
  709. |             |<next>? <stylename>? ';' '}'                                 |
  710. |<styledef>   |\ s  | \ cs  | \ ds                                          |
  711. |<keycode>    |'{' \ keycode <keys> '}'                                     |
  712. |<additive>   |\additive                                                    |
  713. |<based>      |\ sbasedon                                                   |
  714. |<next>       |\ snext                                                      |
  715. |<formatting> |(<brdrdef> | <parfmt> | <apoctl> | <tabdef> | <shading> |    |
  716. |             |<chrfmt>)+                                                   |
  717. |<stylename>  |#PCDATA                                                      |
  718. |<keys>       |( \ shift? & \ ctrl? & \ alt?) <key>                         |
  719. |<key>        |\ fn | #PCDATA                                               |
  720.  
  721.  
  722. For <style>, both <styledef> and <stylename> are optional; the default is
  723. paragraph style 0. Note for <stylename> that Microsoft Word for the
  724. Macintosh interprets commas in #PCDATA as separating style synonyms. Also,
  725. for <key>, the data must be exactly one character.
  726.  
  727. |Control word|Meaning                                                       |
  728. |\csN        |Designates character style.                                   |
  729. |\sN         |Designates paragraph style.                                   |
  730. |\dsN        |Designates section style.                                     |
  731. |\ additive  |Used in a character style definition ('{\ *'\ cs¼'}').        |
  732. |            |Indicates that style attributes are to be applied in addition |
  733. |            |to current attributes, rather than setting the character      |
  734. |            |attributes to only the style definition.                      |
  735. |\ sbasedonN |Defines the number of the style on which the current style is |
  736. |            |based (the default is 222—no style).                          |
  737. |\ snextN    |Defines the next style associated with the current style; if  |
  738. |            |omitted, the next style is the current style.                 |
  739. |\ keycode   |This group is specified within the description of a style in  |
  740. |            |the style sheet in the RTF header. The syntax for this group  |
  741. |            |is '{\ *'\ keycode <keys>'}' where <keys> are the characters  |
  742. |            |used in the key code. For example, a style, Normal, may be    |
  743. |            |defined {\ s0 {\ *\ keycode \ shift\ ctrl n}Normal;} within   |
  744. |            |the RTF style sheet. See the Special Character control words  |
  745. |            |for the characters outside the alphanumeric range that may be |
  746. |            |used.                                                         |
  747. |\ alt       |The alt modifier key. Used to describe shortcut-key codes for |
  748. |            |styles.                                                       |
  749. |\ shift     |The shift modifier key. Used to describe shortcut-key codes   |
  750. |            |for styles.                                                   |
  751. |\ ctrl      |The ctrl modifier key. Used to describe shortcut-key codes for|
  752. |            |styles.                                                       |
  753. |\ fnN       |Specifies a function key where N is the function key number.  |
  754. |            |Used to describe shortcut-key codes for styles.               |
  755.  
  756.  
  757. The following is an example of an RTF style sheet
  758.  
  759.    {\stylesheet{\fs20 \sbasedon222\snext0{\*\keycode \shift\ctrl n}
  760.    Normal;}{\s1\qr \fs20 \sbasedon0\snext1 FLUSHRIGHT;}{\s2\fi-
  761.    720\li720\fs20\ri2880\sbasedon0\snext2 IND;}}
  762.  
  763.  
  764. and RTF paragraphs to which the styles are applied:
  765.  
  766.    \widowctrl\ftnbj\ftnrestart \sectd \linex0\endnhere \pard\plain
  767.    \fs20 This is Normal style.
  768.    \par \pard\plain \s1\qr\fs20
  769.    This is right justified. I call this style FLUSHRIGHT.
  770.    \par \pard\plain \s2\fi-720\li720\fs20\ri2880
  771.    This is an indented paragraph. I call this style IND. It produces
  772.    a hanging indent.
  773.    \par}
  774.  
  775.  
  776. Some of the control words in this example are discussed in later sections.
  777. In the example, note that the properties of the style were emitted
  778. following the application of the style. This was done for two reasons: 1)
  779. to allow RTF readers that don’t support styles to still retain all
  780. formatting, and 2) to allow the additive model for styles, where additional
  781. property changes are â€œadded” on top of the defined style. Some RTF readers
  782. may not â€œapply” a style upon only encountering the style number without the
  783. accompanying formatting information because of this.
  784.  
  785.  
  786. Revision Marks
  787.  
  788. This table allows tracking of multiple authors and reviewers of a document,
  789. and is used in conjunction with the character properties for revision
  790. marks.
  791.  
  792. |Control word |Definition                                                   |
  793. |\ revtbl     |This group consists of subgroups that each identify the      |
  794. |             |author of a revision in the document, as in {Author1;}. This |
  795. |             |is a destination control word.                               |
  796. |             |Revision conflicts, such as one author deleting another's    |
  797. |             |additions, are stored as one group, in the following form:   |
  798. |             |CurrentAuthor\'00\'<length of previous author's              |
  799. |             |name>PreviousAuthor\'00                                      |
  800. |             |PreviousRevisionTime                                         |
  801. |             |The 4 bytes of the Date/Time (DTTM) structure are emitted as |
  802. |             |ASCII characters, so values greater than 127 should be       |
  803. |             |emitted as quoted hexadecimal values.                        |
  804.  
  805.  
  806. All time references for revision marks use the following bit field
  807. structure, DTTM.
  808.  
  809. |Bit numbers  |Information    |Range                                        |
  810. |0–5          |Minute         |0–59                                         |
  811. |6–10         |Hour           |0–23                                         |
  812. |11–15        |Day of month   |1–31                                         |
  813. |16–19        |Month          |1–12                                         |
  814. |20–28        |Year           |= Year - 1900                                |
  815. |29–31        |Day of week    |0 (Sun)–6 (Sat)                              |
  816.  
  817.  
  818. Document Area
  819.  
  820. Once the RTF header is defined, the RTF reader has enough information to
  821. correctly read the actual document text. The document area has the
  822. following syntax.
  823.  
  824. |<document>   |<info>? <docfmt>* <section>+                                 |
  825.  
  826.  
  827. Information Group
  828.  
  829. The \ info control word introduces the information group, which contains
  830. information about the document. This can include the title, author,
  831. keywords, comments, and other information specific to the file. This
  832. information is for use by a document-management utility, if available.
  833.  
  834. This group has the following syntax.
  835.  
  836. |<info>       |'{' <title>? & <subject>? & <author>? & <operator>? &        |
  837. |             |<keywords>? & <comment>? & \ version? & <doccomm>? & \ vern? |
  838. |             |& <creatim>? & <revtim>? & <printim>? & <buptim>? & \ edmins?|
  839. |             |& \ nofpages? & \ nofwords? \ nofchars? & \ id? '}'          |
  840. |<title>      |'{' \ title #PCDATA '}'                                      |
  841. |<subject>    |'{' \ subject #PCDATA '}'                                    |
  842. |<author>     |'{' \ author #PCDATA '}'                                     |
  843. |<operator>   |'{' \ operator #PCDATA '}'                                   |
  844. |<keywords>   |'{' \ keywords #PCDATA '}'                                   |
  845. |<comment>    |'{' \ comment #PCDATA '}'                                    |
  846. |<doccomm>    |'{' \ doccomm #PCDATA '}'                                    |
  847. |<creatim>    |'{' \ creatim <time> '}'                                     |
  848. |<revtim>     |'{' \ revtim <time> '}'                                      |
  849. |<printim>    |'{' \ printim <time> '}'                                     |
  850. |<buptim>     |'{' \ buptim <time> '}'                                      |
  851. |<time>       |\ yr? \ mo? \ dy? \ hr? \ min? \ sec?                        |
  852.  
  853.  
  854. Some applications, such as Word, ask the user to type this information when
  855. saving the document in its native format. If the document is then saved as
  856. an RTF file or translated into RTF, the RTF writer specifies this
  857. information using the following control words. These control words are
  858. destinations and both the control words and the text should be enclosed in
  859. braces ({ }).
  860.  
  861. |Control word |Meaning                                                      |
  862. |\ title      |Title of the document. This is a destination control word.   |
  863. |\ subject    |Subject of the document. This is a destination control word. |
  864. |\ author     |Author of the document. This is a destination control word.  |
  865. |\ operator   |Person who last made changes to the document. This is a      |
  866. |             |destination control word.                                    |
  867. |\ keywords   |Selected keywords for the document. This is a destination    |
  868. |             |control word.                                                |
  869. |\ comment    |Comments; text is ignored. This is a destination control     |
  870. |             |word.                                                        |
  871. |\ versionN   |Version number of the document.                              |
  872. |\ doccomm    |Comments displayed in Word's Edit Summary Info dialog box.   |
  873. |             |This is a destination control word.                          |
  874.  
  875.  
  876. The RTF writer may automatically enter other control words, including the
  877. following.
  878.  
  879. |Control word |Meaning                                                      |
  880. |\ vernN      |Internal version number                                      |
  881. |\ creatim    |Creation time                                                |
  882. |\ revtim     |Revision time                                                |
  883. |\ printim    |Last print time                                              |
  884. |\ buptim     |Backup time                                                  |
  885. |\ edminsN    |Total editing time (in minutes)                              |
  886. |\ yrN        |Year                                                         |
  887. |\ moN        |Month                                                        |
  888. |\ dyN        |Day                                                          |
  889. |\ hrN        |Hour                                                         |
  890. |\ minN       |Minute                                                       |
  891. |\ secN       |Seconds                                                      |
  892. |\ nofpagesN  |Number of pages                                              |
  893. |\ nofwordsN  |Number of words                                              |
  894. |\ nofcharsN  |Number of characters                                         |
  895. |\ idN        |Internal ID number                                           |
  896.  
  897.  
  898. Any control word described in the previous table that does not have a
  899. numeric parameter specifies a date; all dates are specified with the \ yr
  900. \ mo \ dy \ hr \ min \ sec controls.
  901.  
  902. An example of an information group follows:
  903.  
  904.    {\info{\title The Panda's Thumb}{\author Stephen J Gould}{\keywords
  905.    science natural history }}
  906.  
  907.  
  908.  
  909. Document Formatting Properties
  910.  
  911. After the information group (if any), there may be some document formatting
  912. control words (described as <docfmt> in the document area syntax
  913. description). These control words specify the attributes of the document,
  914. such as margins and footnote placement. These attributes must precede the
  915. first plain-text character in the document.
  916.  
  917. The control words that specify document formatting are listed in the
  918. following table (measurements are in twips; a twip is one-twentieth of a
  919. point). For omitted control words, RTF uses the default values.
  920.  
  921. |Control word |Meaning                                                      |
  922. |\ deftabN    |Default tab width in twips (the default is 720).             |
  923. |\ hyphhotzN  |Hyphenation hot zone in twips (the amount of space at the    |
  924. |             |right margin in which words are hyphenated).                 |
  925. |\ hyphconsecN|N is the maximum number of consecutive lines that will be    |
  926. |             |allowed to end in a hyphen. 0 means no limit.                |
  927. |\ hyphcaps   |Toggles hyphenation of capitalized words (the default is on).|
  928. |             |Append 1 or leave control word by itself to toggle property  |
  929. |             |on; append 0 (zero) to turn it off.                          |
  930. |\ hyphauto   |Toggles automatic hyphenation (the default is off). Append 1 |
  931. |             |or leave control word by itself to toggle property on; append|
  932. |             |0 (zero) to turn it off.                                     |
  933. |\ linestartN |Beginning line number (the default is 1).                    |
  934. |\ fracwidth  |Uses fractional character widths when printing (QuickDraw™   |
  935. |             |only).                                                       |
  936. |\ *\ nextfile|Destination; the argument is the name of the file to print or|
  937. |             |index next; it must be enclosed in braces. This is a         |
  938. |             |destination control word.                                    |
  939. |\ *\ template|Destination; the argument is the name of a related template  |
  940. |             |file; it must be enclosed in braces. This is a destination   |
  941. |             |control word.                                                |
  942. |\ makebackup |Backup copy is made automatically when the document is saved.|
  943. |\ defformat  |Tells the RTF reader that the document should be saved in RTF|
  944. |             |format.                                                      |
  945. |\ psover     |Prints PostScript® over the text.                            |
  946. |\ doctemp    |Document is a boilerplate document. For Word for Windows,    |
  947. |             |this is a template; for Word for the Macintosh, this is a    |
  948. |             |stationery file.                                             |
  949. |\ deflangN   |Defines the default language used in the document used with a|
  950. |             |\ plain control word. See the section "Character-Formatting  |
  951. |             |Properties" on page 32 of this Application Note for a list of|
  952. |             |possible values for N.                                       |
  953. |Footnotes and Endnotes                                                    |
  954. |\ fetN       |Footnote/endnote type. This indicates what type of notes are |
  955. |             |present in the document.                                     |
  956. |             |0 Footnotes only or nothing at all (the default).            |
  957. |             |1 Endnotes only.                                             |
  958. |             |2 Footnotes and endnotes both.                               |
  959. |             |For backward compatibility, if \ fet1 is emitted, \ endnotes |
  960. |             |or \ enddoc will be emitted along with \ aendnotes or        |
  961. |             |\ aenddoc. RTF readers that understand \ fet will need to    |
  962. |             |ignore the footnote-positioning control words, and use the   |
  963. |             |endnote control words instead.                               |
  964. |\ ftnsep     |Text argument separates footnotes from the document. This is |
  965. |             |a destination control word.                                  |
  966. |\ ftnsepc    |Text argument separates continued footnotes from the         |
  967. |             |document. This is a destination control word.                |
  968. |\ ftncn      |Text argument is a notice for continued footnotes. This is a |
  969. |             |destination control word.                                    |
  970. |\ aftnsep    |Text argument separates endnotes from the document. This is a|
  971. |             |destination control word.                                    |
  972. |\ aftnsepc   |Text argument separates continued endnotes from the document.|
  973. |             |This is a destination control word.                          |
  974. |\ aftncn     |Text argument is a notice for continued endnotes. This is a  |
  975. |             |destination control word.                                    |
  976. |\ endnotes   |Footnotes at the end of the section (the default).           |
  977. |\ enddoc     |Footnotes at the end of the document.                        |
  978. |\ ftntj      |Footnotes beneath text (top justified).                      |
  979. |\ ftnbj      |Footnotes at the bottom of the page (bottom justified).      |
  980. |\ aendnotes  |Endnotes at end of section (the default).                    |
  981. |\ aenddoc    |Endnotes at end of document.                                 |
  982. |\ aftnbj     |Endnotes at bottom of page (bottom justified).               |
  983. |\ aftntj     |Endnotes beneath text (top justified).                       |
  984. |\ ftnstartN  |Beginning footnote number (the default is 1).                |
  985. |\ aftnstartN |Beginning endnote number (the default is 1).                 |
  986. |\ ftnrstpg   |Restart footnote numbering each page.                        |
  987. |\ ftnrestart |Footnote numbers restart at each section. Microsoft Word for |
  988. |             |the Macintosh uses this control to restart footnote numbering|
  989. |             |at each page.                                                |
  990. |\ ftnrstcont |Continuous footnote numbering (the default).                 |
  991. |\ aftnrestart|Restart endnote numbering each section.                      |
  992. |\ aftnrstcont|Continuous endnote numbering (the default).                  |
  993. |\ ftnnar     |Footnote numbering—Arabic numbering (1, 2, 3, Â¼)             |
  994. |\ ftnnalc    |Footnote numbering—Alphabetic lowercase (a, b, c, Â¼)         |
  995. |\ ftnnauc    |Footnote numbering—Alphabetic uppercase (A, B, C, Â¼)         |
  996. |\ ftnnrlc    |Footnote numbering—Roman lowercase (i, ii, iii, Â¼)           |
  997. |\ ftnnruc    |Footnote numbering—Roman uppercase (I, II, III, Â¼)           |
  998. |\ ftnnchi    |Footnote numbering—Chicago Manual of Style (*, â€ , â€¡, Â§)      |
  999. |\ aftnnar    |Endnote numbering—Arabic numbering (1, 2, 3, Â¼)              |
  1000. |\ aftnnalc   |Endnote numbering—Alphabetic lowercase (a, b, c, Â¼)          |
  1001. |\ aftnnauc   |Endnote numbering—Alphabetic uppercase (A, B, C, Â¼)          |
  1002. |\ aftnnrlc   |Endnote numbering—Roman lowercase (i, ii, iii, Â¼)            |
  1003. |\ aftnnruc   |Endnote numbering—Roman uppercase (I, II, III, Â¼)            |
  1004. |\ aftnnchi   |Endnote numbering—Chicago Manual of Style (*, â€ , â€¡, Â§)       |
  1005. |Page Information                                                          |
  1006. |\ paperwN    |Paper width in twips (the default is 12,240).                |
  1007. |\ paperhN    |Paper height in twips (the default is 15,840).               |
  1008. |\ pszN       |Used to differentiate between paper sizes with identical     |
  1009. |             |dimensions under Windows NT™. Values 1–41 correspond to paper|
  1010. |             |sizes defined in DRIVINI.H in the Windows 3.1 SDK (DMPAPER_  |
  1011. |             |values). Values greater than or equal to 42 correspond to    |
  1012. |             |user-defined forms under Windows NT.                         |
  1013. |\ marglN     |Left margin in twips (the default is 1800).                  |
  1014. |\ margrN     |Right margin in twips (the default is 1800).                 |
  1015. |\ margtN     |Top margin in twips (the default is 1440).                   |
  1016. |\ margbN     |Bottom margin in twips (the default is 1440).                |
  1017. |\ facingp    |Facing pages (activates odd/even headers and gutters).       |
  1018. |\ gutterN    |Gutter width in twips (the default is 0).                    |
  1019. |\ margmirror |Switches margin definitions on left and right pages. Used in |
  1020. |             |conjunction with \ facingp.                                  |
  1021. |\ landscape  |Landscape format.                                            |
  1022. |\ pgnstartN  |Beginning page number (the default is 1).                    |
  1023. |\ widowctrl  |Enable widow and orphan control.                             |
  1024. |Linked Styles                                                             |
  1025. |\ linkstyles |Update document styles automatically based on template.      |
  1026. |Compatibility Options                                                     |
  1027. |\ notabind   |Don't add automatic tab stop for hanging indent.             |
  1028. |\ wraptrsp   |Wrap trailing spaces onto the next line.                     |
  1029. |\ prcolbl    |Print all colors as black.                                   |
  1030. |\ noextrasprl|Don't add extra space to line height for showing             |
  1031. |             |raised/lowered characters.                                   |
  1032. |\ nocolbal   |Don't balance columns.                                       |
  1033. |\ cvmme      |Treat old-style escaped quotation marks (\ ") as current     |
  1034. |             |style ("") in mail merge data documents.                     |
  1035. |\ sprstsp    |Suppress extra line spacing at top of page. Basically, this  |
  1036. |             |means to ignore any line spacing larger than Auto at the top |
  1037. |             |of a page.                                                   |
  1038. |\ sprsspbf   |Suppress space before paragraph property after hard page or  |
  1039. |             |column break.                                                |
  1040. |\ otblrul    |Combine table borders as done in Word 5.x for the Macintosh. |
  1041. |             |Contradictory table border information is resolved in favor  |
  1042. |             |of the first cell.                                           |
  1043. |\ transmf    |Metafiles are considered transparent; don't blank the area   |
  1044. |             |behind metafiles.                                            |
  1045. |\ swpbdr     |If a paragraph has a left border (not a box) and the         |
  1046. |             |Different Odd And Even or Mirror Margins check box is        |
  1047. |             |selected, Word will print the border on the right for        |
  1048. |             |odd-numbered pages.                                          |
  1049. |\ brkfrm     |Show hard (manual) page breaks and column breaks in frames.  |
  1050. |Forms                                                                     |
  1051. |\ formprot   |This document is protected for forms.                        |
  1052. |\ allprot    |This document has no unprotected areas.                      |
  1053. |\ formshade  |This document has form field shading on.                     |
  1054. |\ formdisp   |This document currently has a forms drop down or check box   |
  1055. |             |selected.                                                    |
  1056. |\ printdata  |This document has print form data only on.                   |
  1057. |Revision Marks                                                            |
  1058. |\ revprot    |This document is protected for revisions. The user can edit  |
  1059. |             |the document, but revision marking cannot be disabled.       |
  1060. |\ revisions  |Turns on revision marking.                                   |
  1061. |\ revpropN   |Argument indicates how revised text will be displayed: 0 for |
  1062. |             |no properties shown; 1 for bold; 2 for italic; 3 for         |
  1063. |             |underline (the default); 4 for double underline.             |
  1064. |\ revbarN    |Vertical lines mark altered text, based on the argument: 0   |
  1065. |             |for no marking; 1 for left margin; 2 for right margin; 3 for |
  1066. |             |outside (the default: left on left pages, right on right     |
  1067. |             |pages).                                                      |
  1068. |Annotations                                                               |
  1069. |\ annotprot  |This document is protected for annotations. The user cannot  |
  1070. |             |edit the document but can insert annotations.                |
  1071. |Bidirectional Controls                                                    |
  1072. |\ rtldoc     |This document will be formatted to have Arabic-style         |
  1073. |             |pagination.                                                  |
  1074. |\ ltrdoc     |This document will have English-style pagination (the        |
  1075. |             |default).                                                    |
  1076.  
  1077.  
  1078. Note that the three document-protection control words (\ formprot,
  1079. \ revprot, and \ annotprot) are mutually exclusive; only one of the three
  1080. can apply to any given document. Also, there is currently no method for
  1081. storing passwords in RTF, so any document that associates a password with a
  1082. protection level will lose the password protection in RTF.
  1083.  
  1084. For more information about bidirectional controls, see â€œBidirectional
  1085. Language Support” on page 53 of this Application Note.
  1086.  
  1087.  
  1088. Section Text
  1089.  
  1090. Each section in the RTF file has the following syntax:
  1091.  
  1092. |<section>    | <secfmt>* <hdrftr>? <para>+ ( \ sect <section>)?            |
  1093.  
  1094.  
  1095. Section Formatting Properties
  1096.  
  1097. At the beginning of each section, there may be some section-formatting
  1098. control words (described as <secfmt> in the section text syntax
  1099. description). These control words specify section-formatting properties,
  1100. which apply to the text following the control word, with the exception of
  1101. the section-break control words (those beginning with \ sbk). Section-break
  1102. control words describe the break preceding the text. These control words
  1103. can appear anywhere in the section, not just at the start.
  1104.  
  1105. Note that if the \sectd control word is not present, the current section
  1106. inherits all section properties defined in the previous section.
  1107.  
  1108. The section-formatting control words are listed in the following table.
  1109.  
  1110. |Control word |Meaning                                                      |
  1111. |\sect        |New section.                                                 |
  1112. |\ sectd      |Reset to default section properties.                         |
  1113. |\ endnhere   |Endnotes included in the section.                            |
  1114. |\ binfsxnN   |N is the printer bin used for the first page of the section. |
  1115. |             |If this control is not defined then the first page uses the  |
  1116. |             |same printer bin as defined by the \ binsxnN control.        |
  1117. |\ binsxnN    |N is the printer bin used for the pages of the section.      |
  1118. |\ dsN        |Designates section style; if a section style is specified,   |
  1119. |             |style properties must be specified with the section.         |
  1120. |\ pnseclvlN  |Used for multilevel lists. This property sets the default    |
  1121. |             |numbering style for each corresponding \ pnlvlN control word |
  1122. |             |(bullets and numbering property for paragraphs) within that  |
  1123. |             |section. This is a destination control word.                 |
  1124. |\ sectunlocke|This section is unlocked for forms.                          |
  1125. |d            |                                                             |
  1126. |Section Break                                                             |
  1127. |\ sbknone    |No section break.                                            |
  1128. |\ sbkcol     |Section break starts a new column.                           |
  1129. |\ sbkpage    |Section break starts a new page (the default).               |
  1130. |\ sbkeven    |Section break starts at an even page.                        |
  1131. |\ sbkodd     |Section break starts at an odd page.                         |
  1132. |Columns                                                                   |
  1133. |\ colsN      |Number of columns for "snaking" (the default is 1).          |
  1134. |\ colsxN     |Space between columns in twips (the default is 720).         |
  1135. |\ colnoN     |Column number to be formatted; used to specify formatting for|
  1136. |             |variable-width columns.                                      |
  1137. |\ colsrN     |Space to right of column in twips; used to specify formatting|
  1138. |             |for variable-width columns.                                  |
  1139. |\ colwN      |Width of column in twips; used to override the default       |
  1140. |             |constant width setting for variable-width columns.           |
  1141. |\ linebetcol |Line between columns.                                        |
  1142. |Line Numbering                                                            |
  1143. |\ linemodN   |Line-number modulus amount to increase each line number (the |
  1144. |             |default is 1).                                               |
  1145. |\ linexN     |Distance from the line number to the left text margin in     |
  1146. |             |twips (the default is 360). The automatic distance is 0.     |
  1147. |\ linestartsN|Beginning line number (the default is 1).                    |
  1148. |\ linerestart|Line numbers restart at \ linestarts value.                  |
  1149. |\ lineppage  |Line numbers restart on each page.                           |
  1150. |\ linecont   |Line numbers continue from the preceding section.            |
  1151. |Page Information                                                          |
  1152. |\ pgwsxnN    |N is the page width in twips. A \ sectd resets the value to  |
  1153. |             |that specified by \ paperwN in the document properties.      |
  1154. |\ pghsxnN    |N is the page height in twips. A \ sectd resets the value to |
  1155. |             |that specified by \ paperhN in the document properties.      |
  1156. |\ marglsxnN  |N is the left margin of the page in twips. A \ sectd resets  |
  1157. |             |the value to that specified by \ marglN in the document      |
  1158. |             |properties.                                                  |
  1159. |\ margrsxnN  |N is the right margin of the page in twips. A \ sectd resets |
  1160. |             |the value to that specified by \ margrN in the document      |
  1161. |             |properties.                                                  |
  1162. |\ margtsxnN  |N is the top margin of the page in twips. A \ sectd resets   |
  1163. |             |the value to that specified by \ margtN in the document      |
  1164. |             |properties.                                                  |
  1165. |\ margbsxnN  |N is the bottom margin of the page in twips. A \ sectd resets|
  1166. |             |the value to that specified by \ margbN in the document      |
  1167. |             |properties.                                                  |
  1168. |\ guttersxnN |N is the width of the gutter margin for the section in twips.|
  1169. |             |A \ sectd resets the value to that specified by \ gutterN    |
  1170. |             |from the document properties. If Facing Pages is turned off, |
  1171. |             |the gutter will be added to the left margin of all pages. If |
  1172. |             |Facing Pages is turned on, the gutter will be added to the   |
  1173. |             |left side of odd-numbered pages and the right side of        |
  1174. |             |even-numbered pages.                                         |
  1175. |\ lndscpsxn  |Page orientation is in landscape format. To mix portrait and |
  1176. |             |landscape sections within a document, the \ landscape control|
  1177. |             |should not be used so that the default for a section is      |
  1178. |             |portrait, which may be overridden by the \ lndscpsxn control.|
  1179. |\ titlepg    |First page has a special format.                             |
  1180. |\ headeryN   |Header is N twips from the top of the page (the default is   |
  1181. |             |720).                                                        |
  1182. |\ footeryN   |Footer is N twips from the bottom of the page (the default is|
  1183. |             |720).                                                        |
  1184. |Page Numbers                                                              |
  1185. |\ pgnstartsN |Beginning page number (the default is 1).                    |
  1186. |\ pgncont    |Continuous page numbering (the default).                     |
  1187. |\ pgnrestart |Page numbers restart at \ pgnstarts value.                   |
  1188. |\ pgnxN      |Page number is N twips from the right margin (the default is |
  1189. |             |720).                                                        |
  1190. |\ pgnyN      |Page number is N twips from the top margin (the default is   |
  1191. |             |720).                                                        |
  1192. |\ pgndec     |Page-number format is decimal.                               |
  1193. |\ pgnucrm    |Page-number format is uppercase roman numeral.               |
  1194. |\ pgnlcrm    |Page-number format is lowercase roman numeral.               |
  1195. |\ pgnucltr   |Page-number format is uppercase letter.                      |
  1196. |\ pgnlcltr   |Page-number format is lowercase letter.                      |
  1197. |\ pgnhnN     |Indicates which heading level is used to prefix a heading    |
  1198. |             |number to the page number. This control word can only be used|
  1199. |             |in conjunction with numbered heading styles. 0 specifies to  |
  1200. |             |not show heading level (the default). Values 1-9 correspond  |
  1201. |             |to heading levels 1 through 9.                               |
  1202. |\ pgnhnsh    |Hyphen separator character. This separator and the successive|
  1203. |             |ones appear between the heading level number and the page    |
  1204. |             |number.                                                      |
  1205. |\ pgnhnsp    |Period separator character.                                  |
  1206. |\ pgnhnsc    |Colon separator character.                                   |
  1207. |\ pgnhnsm    |Em-dash (—) separator character.                             |
  1208. |\ pgnhnsn    |En-dash (–) separator character.                             |
  1209. |Vertical Alignment                                                        |
  1210. |\ vertalt    |Text is top-aligned (the default).                           |
  1211. |\ vertalb    |Text is bottom-aligned.                                      |
  1212. |\ vertalc    |Text is centered vertically.                                 |
  1213. |\ vertalj    |Text is justified vertically.                                |
  1214. |Bidirectional Controls                                                    |
  1215. |\ rtlsect    |This section will snake (newspaper style) columns from right |
  1216. |             |to left.                                                     |
  1217. |\ ltrsect    |This section will snake (newspaper style) columns from left  |
  1218. |             |to right (the default).                                      |
  1219.  
  1220.  
  1221. Headers and Footers
  1222.  
  1223. Headers and footers are RTF destinations. Each section in the document can
  1224. have its own set of headers and footers. If no headers or footers are
  1225. defined for a given section, the headers and footers from the previous
  1226. section (if any) are used. Headers and footers have the following syntax:
  1227.  
  1228. |<hdrftr>     |'{' <hdrctl> <para>+ '}' <hdrftr>?                           |
  1229. |<hdrctl>     |\ header | \ footer | \ headerl | \ headerr | \ headerf |    |
  1230. |             |\ footerl | \ footerr | \ footerf                            |
  1231.  
  1232.  
  1233. Note that each separate <hdrftr> group must have a distinct <hdrctl>
  1234. introducing it.
  1235.  
  1236. |Control word |Meaning                                                      |
  1237. |\ header     |Header on all pages. This is a destination control word.     |
  1238. |\ footer     |Footer on all pages. This is a destination control word.     |
  1239. |\ headerl    |Header on left pages only. This is a destination control     |
  1240. |             |word.                                                        |
  1241. |\ headerr    |Header on right pages only. This is a destination control    |
  1242. |             |word.                                                        |
  1243. |\ headerf    |Header on first page only. This is a destination control     |
  1244. |             |word.                                                        |
  1245. |\ footerl    |Footer on left pages only. This is a destination control     |
  1246. |             |word.                                                        |
  1247. |\ footerr    |Footer on right pages only. This is a destination control    |
  1248. |             |word.                                                        |
  1249. |\ footerf    |Footer on first page only. This is a destination control     |
  1250. |             |word.                                                        |
  1251.  
  1252.  
  1253. The \ headerl, \ headerr, \ footerl, and \ footerr control words are used
  1254. in conjunction with the \ facingp control word, and the \ headerf and
  1255. \ footerf control words are used in conjunction with the \ titlepg control
  1256. word. Many RTF readers will not function correctly if the appropriate
  1257. document properties are not set. In particular, if \facingp is not set,
  1258. then only \header and \footer should be used; if \facingp is set, then only
  1259. \headerl, \headerr, \footerl, and \footerr should be used. Combining both
  1260. \facingp and \titlepg is allowed. You should not use \header to set the
  1261. headers for both pages when \facingp is set. You can use \headerf if
  1262. \titlepg is not set, but no header will appear. For more information, see
  1263. "Document Formatting Properties" on page 15 and "Section Formatting
  1264. Properties" on page 19 of this Application Note.
  1265.  
  1266. If the previous section had a first page header or footer and had \ titlepg
  1267. set, and the current section does not, then the previous section's first
  1268. page header or footer is disabled. However, it is not destroyed; if
  1269. subsequent sections have \ titlepg set, then the first page header or
  1270. footer is restored.
  1271.  
  1272.  
  1273. Paragraph Text
  1274.  
  1275. There are two kinds of paragraphs: plain and table. A table is a collection
  1276. of paragraphs, and a table row is a continuous sequence of paragraphs
  1277. partitioned into cells. The \ intbl paragraph-formatting control word
  1278. identifies the paragraph as part of a table. For more information, see
  1279. "Table Definitions" on page 29 of this Application Note. This control is
  1280. inherited between paragraphs that do not have paragraph properties reset
  1281. with \ pard.
  1282.  
  1283. |<para>       |<textpar> | <row>                                            |
  1284. |<textpar>    |<pn>? <brdrdef>? <parfmt>* <apoctl>* <tabdef>? <shading>?    |
  1285. |             |(\subdocument | <char>+) ( \ par <para>)?                    |
  1286. |<row>        |<tbldef> <cell>+ \ row                                       |
  1287. |<cell>       |<textpar>+ \ cell                                            |
  1288.  
  1289.  
  1290. Paragraph Formatting Properties
  1291.  
  1292. These control words (described as <parfmt> in the paragraph-text syntax
  1293. description) specify generic paragraph formatting properties. These control
  1294. words can appear anywhere in the body of the paragraph, not just at the
  1295. beginning.
  1296.  
  1297. Note that if the \pard control word is not present, the current paragraph
  1298. inherits all paragraph properties defined in the previous paragraph.
  1299.  
  1300. The paragraph-formatting control words are listed in the following table.
  1301.  
  1302. |Control word |Meaning                                                      |
  1303. |\par         |New paragraph.                                               |
  1304. |\ pard       |Resets to default paragraph properties.                      |
  1305. |\ sN         |Designates paragraph style; if a paragraph style is          |
  1306. |             |specified, style properties must be specified with the       |
  1307. |             |paragraph. N references an entry in the stylesheet.          |
  1308. |\ hyphpar    |Toggles automatic hyphenation for the paragraph. Append 1 or |
  1309. |             |nothing to toggle property on; append 0 (zero) to turn it    |
  1310. |             |off.                                                         |
  1311. |\ intbl      |Paragraph is part of a table.                                |
  1312. |\ keep       |Keep paragraph intact.                                       |
  1313. |\ nowidctlpar|No widow/orphan control. This is a paragraph-level property  |
  1314. |             |and is used to override the document-level \ widowctrl.      |
  1315. |\ keepn      |Keep paragraph with the next paragraph.                      |
  1316. |\ levelN     |N is the outline level of the paragraph.                     |
  1317. |\ noline     |No line numbering.                                           |
  1318. |\ pagebb     |Break page before the paragraph.                             |
  1319. |\ sbys       |Side-by-side paragraphs.                                     |
  1320. |Alignment                                                                 |
  1321. |\ ql         |Left-aligned (the default).                                  |
  1322. |\qr          |Right-aligned.                                               |
  1323. |\ qj         |Justified.                                                   |
  1324. |\ qc         |Centered.                                                    |
  1325. |Indentation                                                               |
  1326. |\ fiN        |First-line indent (the default is 0).                        |
  1327. |\ liN        |Left indent (the default is 0).                              |
  1328. |\ riN        |Right indent (the default is 0).                             |
  1329. |Spacing                                                                   |
  1330. |\ sbN        |Space before (the default is 0).                             |
  1331. |\ saN        |Space after (the default is 0).                              |
  1332. |\ slN        |Space between lines: if this control word is missing or if   |
  1333. |             |\ sl1000 is used, the line spacing is automatically          |
  1334. |             |determined by the tallest character in the line; if N is a   |
  1335. |             |positive value, this size is used only if it is taller than  |
  1336. |             |the tallest character (otherwise the tallest character is    |
  1337. |             |used); if N is a negative value, the absolute value of N is  |
  1338. |             |used, even if it is shorter than the tallest character.      |
  1339. |\ slmultN    |Line spacing multiple; indicates that the current line       |
  1340. |             |spacing is a multiple of "Single" line spacing. This control |
  1341. |             |word can follow only the \ sl control word and works in      |
  1342. |             |conjunction with it.                                         |
  1343. |             |0 "At Least" or "Exactly" line spacing.                      |
  1344. |             |1 Multiple line spacing, relative to "Single."               |
  1345. |Subdocuments                                                              |
  1346. |\ subdocument|This indicates that a subdocument in a master                |
  1347. |N            |document/subdocument relationship should occur here. N       |
  1348. |             |represents an index into the file table. This control word   |
  1349. |             |must be the only item in a paragraph.                        |
  1350. |Bidirectional Controls                                                    |
  1351. |\ rtlpar     |Text in this paragraph will be displayed with right-to-left  |
  1352. |             |precedence.                                                  |
  1353. |\ ltrpar     |Text in this paragraph will be displayed with left-to-right  |
  1354. |             |precedence (the default).                                    |
  1355.  
  1356.  
  1357. Tabs
  1358.  
  1359. Any paragraph may have its own set of tabs. Tabs must follow this syntax:
  1360.  
  1361. |<tabdef>     |(<tab> | <bartab>) +                                         |
  1362. |<tab>        |<tabkind>? <tablead>? \ tx                                   |
  1363. |<bartab>     |<tablead>? \ tb                                              |
  1364. |<tabkind>    |\ tqr | \ tqc | \ tqdec                                      |
  1365. |<tablead>    |\ tldot | \ tlhyph | \ tlul | \tlth | \ tleq                 |
  1366.  
  1367.  
  1368. |Control word |Meaning                                                      |
  1369. |\ txN        |Tab position in twips from the left margin.                  |
  1370. |\ tqr        |Flush-right tab.                                             |
  1371. |\ tqc        |Centered tab.                                                |
  1372. |\ tqdec      |Decimal tab.                                                 |
  1373. |\ tbN        |Bar tab position in twips from the left margin.              |
  1374. |\ tldot      |Leader dots.                                                 |
  1375. |\ tlhyph     |Leader hyphens.                                              |
  1376. |\ tlul       |Leader underline.                                            |
  1377. |\ tlth       |Leader thick line.                                           |
  1378. |\ tleq       |Leader equal sign.                                           |
  1379.  
  1380.  
  1381. Bullets and Numbering
  1382.  
  1383. To provide compatibility with existing RTF readers, all applications that
  1384. can automatically bullet or number paragraphs will also emit the generated
  1385. text as plain text in the \ pntext group. This will allow existing RTF
  1386. readers to capture the plain text and safely ignore the autonumber
  1387. instructions. This group precedes all bulleted or numbered paragraphs, and
  1388. will contain all the text and formatting that would be auto-generated. It
  1389. should precede the '{'\ *\ pn Â¼ '}' destination, and it is the
  1390. responsibility of RTF readers that understand the '{'\ *\ pn Â¼ '}'
  1391. destination to ignore the \ pntext group.
  1392.  
  1393. |<pn>         |<pnseclvl> | <pnpara>                                        |
  1394. |<pnseclvl>   |'{\*' \pnseclvl <pndesc>'}'                                  |
  1395. |<pnpara>     |<pntext> <pnprops>                                           |
  1396. |<pntext>     |'{' \pntext <char> '}'                                       |
  1397. |<pnprops>    |'{\*' \pn <pnlevel> <pndesc>'}'                              |
  1398. |<pnlevel>    |\pnlvl | \pnlvlblt | \pnlvlbody | \pnlvlcont                 |
  1399. |<pndesc>     |<pnnstyle> & <pnchrfmt> & <pntxtb> & <pntxta> & <pnfmt>      |
  1400. |<pnnstyle>   |\pncard | \pndec | \pnucltr | \pnucrm | \pnlcltr | \pnlcrm | |
  1401. |             |\pnord | \pnordt                                             |
  1402. |<pnchrfmt>   |\pnf? & \pnfs? & \pnb? & \pni? & \pncaps? & \pnscaps? &      |
  1403. |             |<pnul>? & \pnstrike? & \pncf?                                |
  1404. |<pnul>       |\pnul | \pnuld | \pnuldb | \pnulnone | \pnulw                |
  1405. |<pnfmt>      |\pnnumonce? & \pnacross? & \pnindent? & \pnsp? & \pnprev? &  |
  1406. |             |<pnjust>? & \pnstart? & \pnhang? & \pnrestart?               |
  1407. |<pnjust>     |\pnqc | \pnql | \pnqr                                        |
  1408. |<pntxtb>     |'{' \pntxtb #PCDATA'}'                                       |
  1409. |<pntxta>     |'{' \pntxta #PCDATA'}'                                       |
  1410.  
  1411.  
  1412. Settings below marked with an asterisk can be turned off by appending 0
  1413. (zero) to the control word.
  1414.  
  1415. |Control word |Definition                                                   |
  1416. |\ pntext     |This group precedes all numbered/bulleted paragraphs, and    |
  1417. |             |contains all auto-generated text and formatting. It should   |
  1418. |             |precede the '{\ *'\ pn Â¼ '}' destination, and it is the      |
  1419. |             |responsibility of RTF readers that understand the '{\ *'\ pn |
  1420. |             |¼ '}' destination to ignore this preceding group. This is a  |
  1421. |             |destination control word.                                    |
  1422. |\ pn         |Turns on paragraph numbering. This is a destination control  |
  1423. |             |word.                                                        |
  1424. |\ pnlvlN     |Paragraph level, where N is a level from 1 to 9. Default set |
  1425. |             |by \pnseclvlN section formatting property.                   |
  1426. |\ pnlvlblt   |Bulleted paragraph (corresponds to level 11). The actual     |
  1427. |             |character used for the bullet is stored in the \ pntxtb      |
  1428. |             |group.                                                       |
  1429. |\ pnlvlbody  |Simple paragraph numbering (corresponds to level 10).        |
  1430. |\ pnlvlcont  |Continue numbering but do not display number (“skip          |
  1431. |             |numbering”).                                                 |
  1432. |\ pnnumonce  |Number each cell only once in a table (the default is to     |
  1433. |             |number each paragraph in a table).                           |
  1434. |\ pnacross   |Number across rows (the default is to number down columns).  |
  1435. |\pnhang      |Paragraph uses a hanging indent.                             |
  1436. |\ pnrestart  |Restart numbering after each section break. Note that this   |
  1437. |             |control word is used only in conjunction with the Heading    |
  1438. |             |Numbering feature (applying multilevel numbering to Heading  |
  1439. |             |style definitions).                                          |
  1440. |\ pncard     |Cardinal numbering (One, Two, Three).                        |
  1441. |\ pndec      |Decimal numbering (1, 2, 3).                                 |
  1442. |\ pnucltr    |Uppercase alphabetic numbering (A, B, C).                    |
  1443. |\ pnucrm     |Uppercase roman numbering (I, II, III).                      |
  1444. |\ pnlcltr    |Lowercase alphabetic numbering (a, b, c).                    |
  1445. |\ pnlcrm     |Lowercase roman numbering. (i, ii, iii).                     |
  1446. |\ pnord      |Ordinal numbering (1st, 2nd, 3rd).                           |
  1447. |\ pnordt     |Ordinal text numbering (First, Second, Third).               |
  1448. |\ pnb        |Bold numbering.*                                             |
  1449. |\ pni        |Italic numbering.*                                           |
  1450. |\ pncaps     |All Caps numbering.*                                         |
  1451. |\ pnscaps    |Small Caps numbering.*                                       |
  1452. |\ pnul       |Continuous underline.*                                       |
  1453. |\ pnuld      |Dotted underline.                                            |
  1454. |\ pnuldb     |Double underline.                                            |
  1455. |\ pnulnone   |Turns off underlining.                                       |
  1456. |\ pnulw      |Word underline.                                              |
  1457. |\ pnstrike   |Strikethrough numbering.*                                    |
  1458. |\ pncfN      |Foreground color—index into color table (the default is 0).  |
  1459. |\ pnfN       |Font number.                                                 |
  1460. |\ pnfsN      |Font size (in half-points).                                  |
  1461. |\ pnindentN  |Minimum distance from margin to body text.                   |
  1462. |\ pnspN      |Distance from number text to body text.                      |
  1463. |\ pnprev     |Used for multilevel lists. Include information from previous |
  1464. |             |level in this level; for example, 1, 1.1, 1.1.1, 1.1.1.1     |
  1465. |\ pnqc       |Centered numbering.                                          |
  1466. |\ pnql       |Left-justified numbering.                                    |
  1467. |\ pnqr       |Right-justified numbering.                                   |
  1468. |\ pnstartN   |Start At number.                                             |
  1469. |\ pntxta     |Text after. This group contains the text that succeeds the   |
  1470. |             |number. This is a destination control word.                  |
  1471. |\ pntxtb     |Text before. This group contains the text that precedes the  |
  1472. |             |number. This is a destination control word.                  |
  1473.  
  1474.  
  1475. Note that there is a limit of 32 characters total for the sum of text
  1476. before and text after for simple numbering. Multilevel numbering has a
  1477. limit of 64 characters total for the sum of all levels.
  1478.  
  1479.  
  1480. Paragraph Borders
  1481.  
  1482. Paragraph borders have the following syntax:
  1483.  
  1484. |<brdrdef>    |(<brdrseg> <brdr> )+                                         |
  1485. |<brdrseg>    |\ brdrt | \ brdrb | \ brdrl | \ brdrr | \ brdrbtw | \ brdrbar|
  1486. |             || \ box                                                      |
  1487. |<brdr>       |<brdrk> \ brdrw? \ brsp? \ brdrcf?                           |
  1488. |<brdrk>      |\ brdrs | \ brdrth | \ brdrsh | \ brdrdb | \ brdrdot |       |
  1489. |             |\brdrdash | \ brdrhair                                       |
  1490.  
  1491.  
  1492.  
  1493.  
  1494.    |Control word |Meaning                                                      |
  1495. |\ brdrt      |Border top.                                                  |
  1496. |\ brdrb      |Border bottom.                                               |
  1497. |\ brdrl      |Border left.                                                 |
  1498. |\ brdrr      |Border right.                                                |
  1499. |\ brdrbtw    |Consecutive paragraphs with identical border formatting are  |
  1500. |             |considered part of a single group with the border information|
  1501. |             |applying to the entire group. To have borders around         |
  1502. |             |individual paragraphs within the group, the \ brdrbtw control|
  1503. |             |must be specified for that paragraph.                        |
  1504. |\ brdrbar    |Border outside (right side of odd-numbered pages, left side  |
  1505. |             |of even-numbered pages).                                     |
  1506. |\ box        |Border around the paragraph (box paragraph).                 |
  1507. |\ brdrs      |Single-thickness border.                                     |
  1508. |\ brdrth     |Double-thickness border.                                     |
  1509. |\ brdrsh     |Shadowed border.                                             |
  1510. |\ brdrdb     |Double border.                                               |
  1511. |\ brdrdot    |Dotted border.                                               |
  1512. |\brdrdash    |Dashed border.                                               |
  1513. |\ brdrhair   |Hairline border.                                             |
  1514. |\ brdrwN     |N is the width in twips of the pen used to draw the paragraph|
  1515. |             |border line.                                                 |
  1516. |\ brdrcfN    |N is the color of the paragraph border; specified as an index|
  1517. |             |into the color table in the RTF header.                      |
  1518. |\ brspN      |Space in twips between borders and the paragraph.            |
  1519.  
  1520.  
  1521. Paragraph Shading
  1522.  
  1523. Paragraph shading has the following syntax:
  1524.  
  1525. |<shading>    |( \ shading | <pat>) \ cfpat? \ cbpat?                       |
  1526. |<pat>        |\ bghoriz | \ bgvert | \ bgfdiag | \ bgbdiag | \ bgcross |   |
  1527. |             |\ bgdcross | \ bgdkhoriz | \ bgdkvert | \ bgdkfdiag |        |
  1528. |             |\ bgdkbdiag | \ bgdkcross | \ bgdkdcross                     |
  1529.  
  1530.  
  1531. |Control word |Meaning                                                      |
  1532. |\ shadingN   |N is the shading of the paragraph in hundredths of a percent.|
  1533. |\ bghoriz    |Specifies a horizontal background pattern for the paragraph. |
  1534. |\ bgvert     |Specifies a vertical background pattern for the paragraph.   |
  1535. |\ bgfdiag    |Specifies a forward diagonal background pattern for the      |
  1536. |             |paragraph ( \ \ \ \ ).                                       |
  1537. |\ bgbdiag    |Specifies a backward diagonal background pattern for the     |
  1538. |             |paragraph (//// ).                                           |
  1539. |\ bgcross    |Specifies a cross background pattern for the paragraph.      |
  1540. |\ bgdcross   |Specifies a diagonal cross background pattern for the        |
  1541. |             |paragraph.                                                   |
  1542. |\ bgdkhoriz  |Specifies a dark horizontal background pattern for the       |
  1543. |             |paragraph.                                                   |
  1544. |\ bgdkvert   |Specifies a dark vertical background pattern for the         |
  1545. |             |paragraph.                                                   |
  1546. |\ bgdkfdiag  |Specifies a dark forward diagonal background pattern for the |
  1547. |             |paragraph ( \ \ \ \ ).                                       |
  1548. |\ bgdkbdiag  |Specifies a dark backward diagonal background pattern for the|
  1549. |             |paragraph (//// ).                                           |
  1550. |\ bgdkcross  |Specifies a dark cross background pattern for the paragraph. |
  1551. |\ bgdkdcross |Specifies a dark diagonal cross background pattern for the   |
  1552. |             |paragraph.                                                   |
  1553. |\ cfpatN     |N is the line color of the background pattern, specified as  |
  1554. |             |an index into the document's color table.                    |
  1555. |\ cbpatN     |N is the background color of the background pattern,         |
  1556. |             |specified as an index into the document's color table.       |
  1557.  
  1558.  
  1559. Positioned Objects and Frames
  1560.  
  1561. The following paragraph-formatting control words specify the location of a
  1562. paragraph on the page. Consecutive paragraphs with the same frame
  1563. formatting are considered to be part of the same frame. For two framed
  1564. paragraphs to appear at the same position on a page, they must be separated
  1565. by a paragraph with different or no frame information.
  1566.  
  1567. Note that if any paragraph in a table row has any of these control words
  1568. specified, then all paragraphs in the table row must have the same control
  1569. words specified, either by inheriting the properties from the previous
  1570. paragraph or by respecifying the controls.
  1571.  
  1572. Paragraph positioning has the following syntax:
  1573.  
  1574. |<apoctl>     |<framesize> & <horzpos> & <vertpos> & <txtwrap> & <dropcap>  |
  1575. |<framesize>  |\ absw? & \ absh?                                            |
  1576. |<horzpos>    |<hframe> & <hdist>                                           |
  1577. |<vertpos>    |<vframe> & <vdist>                                           |
  1578. |<txtwrap>    |\ nowrap? & \ dxfrtext? & \ dfrmtxtx? &\ dfrmtxty?           |
  1579. |<dropcap>    |\dropcapli? & \dropcapt?                                     |
  1580. |<hframe>     |\ phmrg? | \ phpg? | \ phcol?                                |
  1581. |<hdist>      |\ posx? | \ posnegx? | \ posxc? | \ posxi? | \ posxo? |      |
  1582. |             |\ posxl? | \ posxr?                                          |
  1583. |<vframe>     |\ pvmrg? | \ pvpg? | \ pvpara?                               |
  1584. |<vdist>      |\ posy? | \ posnegy? | \ posyt? | \ posyil? | \ posyb? |     |
  1585. |             |\ posyc?                                                     |
  1586.  
  1587.  
  1588.  
  1589.  
  1590.    |Control word |Meaning                                                      |
  1591. |\ abswN      |N is the width of the frame in twips.                        |
  1592. |\ abshN      |N is the height of the frame in twips. A positive number     |
  1593. |             |indicates the minimum height of the frame and a negative     |
  1594. |             |number indicates the exact height of the frame. A value of   |
  1595. |             |zero indicates that the height of the frame adjusts to the   |
  1596. |             |contents of the frame. This is the default for frames where  |
  1597. |             |no height is given.                                          |
  1598. |Horizontal Position                                                       |
  1599. |\ phmrg      |Use the margin as the horizontal reference frame.            |
  1600. |\ phpg       |Use the page as the horizontal reference frame.              |
  1601. |\ phcol      |Use the column as the horizontal reference frame. This is the|
  1602. |             |default if no horizontal reference frame is given.           |
  1603. |\ posxN      |Positions the frame N twips from the left edge of the        |
  1604. |             |reference frame.                                             |
  1605. |\ posnegxN   |Same as \ posx but allows arbitrary negative values.         |
  1606. |\ posxc      |Centers the frame horizontally within the reference frame.   |
  1607. |\ posxi      |Positions the paragraph horizontally inside the reference    |
  1608. |             |frame.                                                       |
  1609. |\ posxo      |Positions the paragraph horizontally outside the reference   |
  1610. |             |frame.                                                       |
  1611. |\ posxr      |Positions the paragraph to the right within the reference    |
  1612. |             |frame.                                                       |
  1613. |\ posxl      |Positions the paragraph to the left within the reference     |
  1614. |             |frame. This is the default if no horizontal positioning      |
  1615. |             |information is given.                                        |
  1616. |Vertical Position                                                         |
  1617. |\ pvmrg      |Positions the reference frame vertically relative to the     |
  1618. |             |margin. This is the default if no vertical frame positioning |
  1619. |             |information is given.                                        |
  1620. |\ pvpg       |Positions the reference frame vertically relative to the     |
  1621. |             |page.                                                        |
  1622. |\ pvpara     |Positions the reference frame vertically relative to the top |
  1623. |             |of the top left corner of the next unframed paragraph in the |
  1624. |             |RTF stream.                                                  |
  1625. |\ posyN      |Positions the paragraph N twips from the top edge of the     |
  1626. |             |reference frame.                                             |
  1627. |\ posnegyN   |Same as \ posy but allows arbitrary negative values.         |
  1628. |\ posyil     |Positions the paragraph vertically to be in-line.            |
  1629. |\ posyt      |Positions the paragraph at the top of the reference frame.   |
  1630. |\ posyc      |Centers the paragraph vertically within the reference frame. |
  1631. |\ posyb      |Positions the paragraph at the bottom of the reference frame.|
  1632. |Text Wrapping                                                             |
  1633. |\ nowrap     |Prevents text from flowing around the positioned object.     |
  1634. |\ dxfrtextN  |Distance in twips of a positioned paragraph from text in the |
  1635. |             |main text flow in all directions.                            |
  1636. |\ dfrmtxtxN  |N is the horizontal distance in twips from text on both sides|
  1637. |             |of the frame.                                                |
  1638. |\ dfrmtxtyN  |N is the vertical distance in twips from text on both sides  |
  1639. |             |of the frame.                                                |
  1640. |Drop Caps                                                                 |
  1641. |\ dropcapliN |Number of lines drop cap is to occupy. The range is 1 through|
  1642. |             |10.                                                          |
  1643. |\ dropcaptN  |Type of drop cap:                                            |
  1644. |             |1 In-text drop cap                                           |
  1645. |             |2 Margin drop cap                                            |
  1646.  
  1647.  
  1648. The following is an example of absolute-positioned text in a document:
  1649.  
  1650.    \par \pard \pvpg\phpg\posxc\posyt\absw5040\dxfrtest173 First APO para
  1651.    \par \pard \phmrg\posxo\posyc\dxfrtext1152 Second APO para
  1652.  
  1653.  
  1654. Table Definitions
  1655.  
  1656. There is no RTF table group; instead, tables are specified as paragraph
  1657. properties. A table is represented as a sequence of table rows. A table row
  1658. is a continuous sequence of paragraphs partitioned into cells. The table
  1659. row begins with the \ trowd control word and ends with the \ row control
  1660. word. Every paragraph that is contained in a table row must have the
  1661. \ intbl control word specified or inherited from the previous paragraph. A
  1662. cell may have more than one paragraph in it; the cell is terminated by a
  1663. cell mark (the \ cell control word), and the row is terminated by a row
  1664. mark (the \ row control word). Table rows can also be positioned. In this
  1665. case, every paragraph in a table row must have the same positioning
  1666. controls (see the <apoctl> controls on page 27 of this Application Note).
  1667. Table properties may be inherited from the previous row; therefore, a
  1668. series of table rows may be introduced by a single <tbldef>.
  1669.  
  1670. An RTF table row has the following syntax, as shown in the general
  1671. paragraph-text syntax shown on page 22 of this Application Note.
  1672.  
  1673. |<row>        |<tbldef> <cell>+ \ row                                       |
  1674. |<cell>       |<textpar>+ \ cell                                            |
  1675.  
  1676.  
  1677. A table definition has the following syntax:
  1678.  
  1679. |<tbldef>     |\ trowd \ trgaph <rowjust>? & <rowwrite>? <rowtop>? &        |
  1680. |             |<rowbot>? & <rowleft>? & <rowright>? & <rowhor>? & <rowvert>?|
  1681. |             |& \ trleft? & \trrh? \trhdr? & \trkeep? <celldef>+           |
  1682. |<rowjust>    | \ trql | \ trqr | \ trqc                                    |
  1683. |<rowwrite>   |\ ltrrow | \ rtlrow                                          |
  1684. |<rowtop>     |\ trbrdrt <brdr>                                             |
  1685. |<rowbot>     |\ trbrdrl <brdr>                                             |
  1686. |<rowleft>    |\ trbrdrb <brdr>                                             |
  1687. |<rowright>   |\ trbrdrr <brdr>                                             |
  1688. |<rowhor>     |\ trbrdrh <brdr>                                             |
  1689. |<rowvert>    |\ trbrdrv <brdr>                                             |
  1690. |<celldef>    |( \ clmgf? & \ clmrg? <celltop>? & <cellleft>? & <cellbot>? &|
  1691. |             |<cellright>? & <cellshad>?) \ cellx                          |
  1692. |<celltop>    |\ clbrdrt <brdr>                                             |
  1693. |<cellleft>   |\ clbrdrl <brdr>                                             |
  1694. |<cellbot>    |\ clbrdrb <brdr>                                             |
  1695. |<cellright>  |\ clbrdrr <brdr>                                             |
  1696. |<cellshad>   |<cellpat>? \ clcfpat? & \ clcbpat? & \ clshdng               |
  1697. |<cellpat>    |\ clbghoriz | \ clbgvert | \ clbgfdiag | \ clbgbdiag |       |
  1698. |             |\ clbgcross | \clbgdcross | \ clbgdkhor | \ clbgdkvert |     |
  1699. |             |\ clbgdkfdiag | \ clbgdkbdiag | \ clbgdkcross |              |
  1700. |             |\ clbgdkdcross                                               |
  1701.  
  1702.  
  1703. Note for <tbldef> that the number of \cellxs must match the number of
  1704. \cells in the \row.
  1705.  
  1706. The following control words further define options for each row of the
  1707. table.
  1708.  
  1709. |Control word |Meaning                                                      |
  1710. |\ trowd      |Sets table row defaults.                                     |
  1711. |\ trgaphN    |Half the space between the cells of a table row in twips.    |
  1712. |\ cellxN     |Defines the right boundary of a table cell, including its    |
  1713. |             |half of the space between cells.                             |
  1714. |\ clmgf      |The first cell in a range of table cells to be merged.       |
  1715. |\ clmrg      |Contents of the table cell are merged with those of the      |
  1716. |             |preceding cell.                                              |
  1717. |Row Formatting                                                            |
  1718. |\ trql       |Left-justifies a table row with respect to its containing    |
  1719. |             |column.                                                      |
  1720. |\ trqr       |Right-justifies a table row with respect to its containing   |
  1721. |             |column.                                                      |
  1722. |\ trqc       |Centers a table row with respect to its containing column.   |
  1723. |\ trleftN    |Position of the leftmost edge of the table with respect to   |
  1724. |             |the left edge of its column.                                 |
  1725. |\ trrhN      |Height of a table row in twips; when 0 (zero), the height is |
  1726. |             |sufficient for all the text in the line; when positive, the  |
  1727. |             |height is guaranteed to be at least the specified height;    |
  1728. |             |when negative, the absolute value of the height is used,     |
  1729. |             |regardless of the height of the text in the line.            |
  1730. |\ trhdr      |Table row header; this row should appear at the top of every |
  1731. |             |page the current table appears on.                           |
  1732. |\ trkeep     |Table row keep together; this row cannot be split by a page  |
  1733. |             |break. This property is assumed off unless the control word  |
  1734. |             |is present.                                                  |
  1735. |Bidirectional Controls                                                    |
  1736. |\ rtlrow     |Cells in this table row will have right-to-left precedence.  |
  1737. |\ ltrrow     |Cells in this table row will have left-to-right precedence   |
  1738. |             |(the default).                                               |
  1739. |Row Borders                                                               |
  1740. |\ trbrdrt    |Table row border top.                                        |
  1741. |\ trbrdrl    |Table row border left.                                       |
  1742. |\ trbrdrb    |Table row border bottom.                                     |
  1743. |\ trbrdrr    |Table row border right.                                      |
  1744. |\ trbrdrh    |Table row border horizontal (inside).                        |
  1745. |\ trbrdrv    |Table row border vertical (inside).                          |
  1746. |Cell Borders                                                              |
  1747. |\ clbrdrb    |Bottom table cell border.                                    |
  1748. |\ clbrdrt    |Top table cell border.                                       |
  1749. |\ clbrdrl    |Left table cell border.                                      |
  1750. |\ clbrdrr    |Right table cell border.                                     |
  1751. |Cell Shading and Background Pattern                                       |
  1752. |\ clshdngN   |N is the shading of a table cell in hundredths of a percent. |
  1753. |             |This control should be included in RTF along with cell border|
  1754. |             |information.                                                 |
  1755. |\ clbghoriz  |Specifies a horizontal background pattern for the cell.      |
  1756. |\ clbgvert   |Specifies a vertical background pattern for the cell.        |
  1757. |\ clbgfdiag  |Specifies a forward diagonal background pattern for the cell |
  1758. |             |( \ \ \ \ ).                                                 |
  1759. |\ clbgbdiag  |Specifies a backward diagonal background pattern for the cell|
  1760. |             |(//// ).                                                     |
  1761. |\ clbgcross  |Specifies a cross background pattern for the cell.           |
  1762. |\ clbgdcross |Specifies a diagonal cross background pattern for the cell.  |
  1763. |\ clbgdkhor  |Specifies a dark horizontal background pattern for the cell. |
  1764. |\ clbgdkvert |Specifies a dark vertical background pattern for the cell.   |
  1765. |\ clbgdkfdiag|Specifies a dark forward diagonal background pattern for the |
  1766. |             |cell ( \ \ \ \ ).                                            |
  1767. |\ clbgdkbdiag|Specifies a dark backward diagonal background pattern for the|
  1768. |             |cell (//// ).                                                |
  1769. |\ clbgdkcross|Specifies a dark cross background pattern for the cell.      |
  1770. |\ clbgdkdcros|Specifies a dark diagonal cross background pattern for the   |
  1771. |s            |cell.                                                        |
  1772. |\ clcfpatN   |N is the line color of the background pattern.               |
  1773. |\ clcbpatN   |N is the background color of the background pattern.         |
  1774.  
  1775.  
  1776. The following is an example of table text:
  1777.  
  1778.    \par \trowd \trqc\trgaph108\trrh280\trleft36
  1779.    \clbrdrt\brdrth \clbrdrl\brdrth \clbrdrb\brdrdb
  1780.    \clbrdrr\brdrdb \cellx3636\clbrdrt\brdrth
  1781.    \clbrdrl\brdrdb \clbrdrb\brdrdb \clbrdrr\brdrdb
  1782.    \cellx7236\clbrdrt\brdrth \clbrdrl\brdrdb
  1783.    \clbrdrb\brdrdb \clbrdrr\brdrdb \cellx10836\pard \intbl
  1784.    \cell \pard \intbl \cell \pard \intbl \cell \pard \intbl \row
  1785.    \trowd \trqc\trgaph108\trrh280\trleft36 \clbrdrt\brdrdb
  1786.    \clbrdrl\brdrth \clbrdrb \brdrsh\brdrs \clbrdrr\brdrdb
  1787.    \cellx3636\clbrdrt\brdrdb \clbrdr \brdrdb
  1788.    \clbrdrb\brdrsh\brdrs \clbrdrr\brdrdb
  1789.    \cellx7236\clbrdrt\brdrdb \clbrdr \brdrdb
  1790.    \clbrdrb\brdrsh\brdrs \clbrdrr\brdrdb \cellx10836\pard
  1791.    \intbl \cell \pard \intbl \cell \pard \intbl \cell \pard
  1792.    \intbl \row \pard
  1793.  
  1794.  
  1795. Character Text
  1796.  
  1797. Character text has the following syntax:
  1798.  
  1799. |<char>       |<ptext> | <atext> | '{' <char> '}'                           |
  1800. |<ptext>      |(<chrfmt>* <data>+ )+                                        |
  1801. |<data>       |#PCDATA | <spec> | <pict> | <obj> | <do> | <foot> | <annot> ||
  1802. |             |<field> | <idx> | <toc> | <book>                             |
  1803.  
  1804.  
  1805. Character Formatting Properties
  1806.  
  1807. These control words (described as <chrfmt> in the syntax description)
  1808. change character formatting properties. A control word preceding plain text
  1809. turns on the specified attribute. Some control words (indicated in the
  1810. following table by an asterisk following the description) can be turned off
  1811. by the control word followed by 0 (zero). For example, \ b turns on bold,
  1812. while \ b0 turns off bold.
  1813.  
  1814. The character-formatting control words are listed in the following table.
  1815.  
  1816. |Control word |Meaning                                                      |
  1817. |\ plain      |Reset character formatting properties to a default value     |
  1818. |             |defined by the application. The associated character         |
  1819. |             |formatting properties (described in the section "Associated  |
  1820. |             |Character Properties" on page 35 of this Application Note)   |
  1821. |             |are also reset.                                              |
  1822. |\ b          |Bold.*                                                       |
  1823. |\ caps       |All capitals.*                                               |
  1824. |\ deleted    |Marks the text as deletion revision marked.*                 |
  1825. |\ dnN        |Subscript position in half-points (the default is 6).        |
  1826. |\ sub        |Subscripts text and shrinks point size according to font     |
  1827. |             |information.                                                 |
  1828. |\ nosupersub |Turns off superscripting or subscripting.                    |
  1829. |\ expndN     |Expansion or compression of the space between characters in  |
  1830. |             |quarter-points; a negative value compresses (the default is  |
  1831. |             |0).                                                          |
  1832. |\ expndtwN   |Expansion or compression of the space between characters in  |
  1833. |             |twips; a negative value compresses. For backward             |
  1834. |             |compatibility, both \ expndtw and \ expnd should be emitted. |
  1835. |\ kerningN   |Point size (in half-points) above which to kern character    |
  1836. |             |pairs. \ kerning0 turns off kerning.                         |
  1837. |\ fN         |Font number. N refers to an entry in the font table.         |
  1838. |\ fsN        |Font size in half-points (the default is 24).                |
  1839. |\ i          |Italic.*                                                     |
  1840. |\ outl       |Outline.*                                                    |
  1841. |\ revised    |Text has been added since revision marking was turned on.    |
  1842. |\ revauthN   |Index into the revision table. The content of the Nth group  |
  1843. |             |in the revision table is considered to be the author of that |
  1844. |             |revision.                                                    |
  1845. |\ revdttmN   |Time of the revision. The 32-bit DTTM structure is emitted as|
  1846. |             |a long integer.                                              |
  1847. |\ scaps      |Small capitals.*                                             |
  1848. |\ shad       |Shadow.*                                                     |
  1849. |\ strike     |Strikethrough.*                                              |
  1850. |\ ul         |Continuous underline. \ ul0 turns off all underlining.       |
  1851. |\ uld        |Dotted underline.                                            |
  1852. |\ uldb       |Double underline.                                            |
  1853. |\ ulnone     |Stops all underlining.                                       |
  1854. |\ ulw        |Word underline.                                              |
  1855. |\ upN        |Superscript position in half-points (the default is 6).      |
  1856. |\ super      |Superscripts text and shrinks point size according to font   |
  1857. |             |information.                                                 |
  1858. |\ v          |Hidden text.*                                                |
  1859. |\ cfN        |Foreground color (the default is 0).                         |
  1860. |\ cbN        |Background color (the default is 0).                         |
  1861. |\ rtlch      |The character data following this control word will be       |
  1862. |             |treated as a right-to-left run.                              |
  1863. |\ ltrch      |The character data following this control word will be       |
  1864. |             |treated as a left-to-right run (the default).                |
  1865. |\ csN        |Designates character style; if a character style is          |
  1866. |             |specified, style properties must be specified with the       |
  1867. |             |character run. N refers to an entry in the style table.      |
  1868. |\ cchsN      |Indicates any characters not belonging to the default        |
  1869. |             |document character set and tells which character set they do |
  1870. |             |belong to. Macintosh character sets are represented by values|
  1871. |             |greater than 255. The values for N correspond to the values  |
  1872. |             |for the \ fcharset control word.                             |
  1873. |\ langN      |Applies a language to a character. N is a number             |
  1874. |             |corresponding to a language. The \ plain control word resets |
  1875. |             |the language property to the language defined by \ deflangN  |
  1876. |             |in the document properties.                                  |
  1877.  
  1878.  
  1879. The following table defines the standard languages used by Microsoft. This
  1880. table was generated by the Unicode™ group for use with TrueType and
  1881. Unicode.
  1882.  
  1883. |Language name      |Language ID                                            |
  1884. |No language        |0x0400                                                 |
  1885. |Albanian           |0x041c                                                 |
  1886. |Arabic             |0x0401                                                 |
  1887. |Bahasa             |0x0421                                                 |
  1888. |Belgian Dutch      |0x0813                                                 |
  1889. |Belgian French     |0x080c                                                 |
  1890. |Brazilian          |0x0416                                                 |
  1891. |Portuguese         |                                                       |
  1892. |Bulgarian          |0x0402                                                 |
  1893. |Catalan            |0x0403                                                 |
  1894. |Croato-Serbian     |0x041a                                                 |
  1895. |(Latin)            |                                                       |
  1896. |Czech              |0x0405                                                 |
  1897. |Danish             |0x0406                                                 |
  1898. |Dutch              |0x0413                                                 |
  1899. |English            |0x0c09                                                 |
  1900. |(Australian)       |                                                       |
  1901. |English (U.K.)     |0x0809                                                 |
  1902. |English (U.S.)     |0x0409                                                 |
  1903. |Finnish            |0x040b                                                 |
  1904. |French             |0x040c                                                 |
  1905. |French (Canadian)  |0x0c0c                                                 |
  1906. |German             |0x0407                                                 |
  1907. |Greek              |0x0408                                                 |
  1908. |Hebrew             |0x040d                                                 |
  1909. |Hungarian          |0x040e                                                 |
  1910. |Icelandic          |0x040f                                                 |
  1911. |Italian            |0x0410                                                 |
  1912. |Japanese           |0x0411                                                 |
  1913. |Korean             |0x0412                                                 |
  1914. |Norwegian (Bokmal) |0x0414                                                 |
  1915. |Norwegian (Nynorsk)|0x0814                                                 |
  1916. |Polish             |0x0415                                                 |
  1917. |Portuguese         |0x0816                                                 |
  1918. |Rhaeto-Romanic     |0x0417                                                 |
  1919. |Romanian           |0x0418                                                 |
  1920. |Russian            |0x0419                                                 |
  1921. |Serbo-Croatian     |0x081a                                                 |
  1922. |(Cyrillic)         |                                                       |
  1923. |Simplified Chinese |0x0804                                                 |
  1924. |Slovak             |0x041b                                                 |
  1925. |Spanish (Castilian)|0x040a                                                 |
  1926. |Spanish (Mexican)  |0x080a                                                 |
  1927. |Swedish            |0x041d                                                 |
  1928. |Swiss French       |0x100c                                                 |
  1929. |Swiss German       |0x0807                                                 |
  1930. |Swiss Italian      |0x0810                                                 |
  1931. |Thai               |0x041e                                                 |
  1932. |Traditional Chinese|0x0404                                                 |
  1933. |Turkish            |0x041f                                                 |
  1934. |Urdu               |0x0420                                                 |
  1935.  
  1936.  
  1937. To read negative \ expnd values from Word for the Macintosh, an RTF reader
  1938. should use only the low-order 6 bits of the value read. Word for the
  1939. Macintosh does not emit negative values for \ expnd. Instead, it treats
  1940. values from 57 through 63 as â€“7 through â€“1, respectively (the low-order 6
  1941. bits of 57 through 63 are the same as â€“7 through â€“1).
  1942.  
  1943.  
  1944. Associated Character Properties
  1945.  
  1946. Bidirectional-aware text processors often need to associate a Latin (or
  1947. other left-to-right) font with an Arabic or Hebrew (or other right-to-left)
  1948. font. The association is needed to match commonly used pairs of fonts in
  1949. name, size, and other attributes. While RTF defines a broad variety of
  1950. associated character properties, any implementation may choose to not
  1951. implement a particular associated character property and share the property
  1952. between the Latin and Arabic fonts.
  1953.  
  1954. Property association uses the following syntax:
  1955.  
  1956. |<atext>      |<ltrrun> | <rtlrun>                                          |
  1957. |<ltrrun>     |\ rtlch \ af & <aprops>* \ ltrch <ptext>                     |
  1958. |<rtlrun>     |\ ltrch \ af & <aprops>* \ rtlch <ptext>                     |
  1959.  
  1960.  
  1961. Here are some examples of property association:
  1962.  
  1963.    \ ltrch\ af2\ ab\ au\ rtlch\ u Sample Text
  1964.  
  1965. This is a right-to-left run. Text will use the default bidirectional font,
  1966. and will be underlined. The left-to-right font associated with this run is
  1967. font 2 (in the font table) with bolding and underlining.
  1968.  
  1969.    \ plain\ rtlch\ ltrch Sample Text
  1970.  
  1971. This is a left-to-right run. The right-to-left font and the left-to-right
  1972. font use the default font (specified by \ deff).
  1973.  
  1974.    \ rtlch\ af5\ ab\ ai\ ltrch\ u Sample Text
  1975.  
  1976. This is a left-to-right run. The right-to-left font is font 5, bold and
  1977. italicized. The left-to-right font is the default font, underlined. If the
  1978. reader does not support underlining in the associated font, both fonts will
  1979. be underlined.
  1980.  
  1981. The property association control words (described as <aprops> in the syntax
  1982. description) are listed in the following table. Some control words
  1983. (indicated in the following table by an asterisk following the description)
  1984. can be turned off by the control word followed by 0 (zero).
  1985.  
  1986. |Control word |Meaning                                                      |
  1987. |\ ab         |Associated font is bold.*                                    |
  1988. |\ acaps      |Associated font is all capitals.*                            |
  1989. |\ acfN       |Associated foreground color (the default is 0).              |
  1990. |\ adnN       |Associated font is subscript position in half-points (the    |
  1991. |             |default is 6).                                               |
  1992. |\ aexpndN    |Expansion or compression of the space between characters in  |
  1993. |             |quarter-points; a negative value compresses (the default is  |
  1994. |             |0).                                                          |
  1995. |\ afN        |Associated font number (the default is 0).                   |
  1996. |\ afsN       |Associated font size in half-points (the default is 24).     |
  1997. |\ ai         |Associated font is italic.*                                  |
  1998. |\ alangN     |Language ID for the associated font. (This uses the same     |
  1999. |             |language ID codes describedon page 33 of this Application    |
  2000. |             |Note.)                                                       |
  2001. |\ aoutl      |Associated font is outline.*                                 |
  2002. |\ ascaps     |Associated font is small capitals.*                          |
  2003. |\ ashad      |Associated font is shadow.*                                  |
  2004. |\ astrike    |Associated font is strikethrough.*                           |
  2005. |\ aul        |Associated font is continuous underline. \ aul0 turns off all|
  2006. |             |underlining for the alternate font.                          |
  2007. |\ auld       |Associated font is dotted underline.                         |
  2008. |\ auldb      |Associated font is double underline.                         |
  2009. |\ aulnone    |Associated font is no longer underlined.                     |
  2010. |\ aulw       |Associated font is word underline.                           |
  2011. |\ aupN       |Superscript position in half-points (the default is 6).      |
  2012.  
  2013.  
  2014. Special Characters
  2015.  
  2016. The RTF Specification includes control words for special characters
  2017. (described as <spec> in the character-text syntax description). If a
  2018. special-character control word is not recognized by the RTF reader, it is
  2019. ignored, and the text following it is considered plain text. The RTF
  2020. Specification is flexible enough to allow new special characters to be
  2021. added for interchange with other software.
  2022.  
  2023. The special RTF characters are listed in the following table.
  2024.  
  2025. |Control word |Meaning                                                      |
  2026. |\ chdate     |Current date (as in headers).                                |
  2027. |\ chdpl      |Current date in long format (for example, Thursday, October  |
  2028. |             |28, 1993).                                                   |
  2029. |\ chdpa      |Current date in abbreviated format (for example, Thu, Oct 28,|
  2030. |             |1993).                                                       |
  2031. |\ chtime     |Current time (as in headers).                                |
  2032. |\ chpgn      |Current page number (as in headers).                         |
  2033. |\ sectnum    |Current section number (as in headers).                      |
  2034. |\ chftn      |Automatic footnote reference (footnotes follow in a group).  |
  2035. |\ chatn      |Annotation reference (annotation text follows in a group).   |
  2036. |\ chftnsep   |Anchoring character for footnote separator.                  |
  2037. |\ chftnsepc  |Anchoring character for footnote continuation.               |
  2038. |\ cell       |End of table cell.                                           |
  2039. |\ row        |End of table row.                                            |
  2040. |\ par        |End of paragraph.                                            |
  2041. |\ sect       |End of section and paragraph.                                |
  2042. |\ page       |Required page break.                                         |
  2043. |\ column     |Required column break.                                       |
  2044. |\ line       |Required line break (no paragraph break).                    |
  2045. |\ softpage   |Nonrequired page break. Emitted as it appears in galley view.|
  2046. |\ softcol    |Nonrequired column break. Emitted as it appears in galley    |
  2047. |             |view.                                                        |
  2048. |\ softline   |Nonrequired line break. Emitted as it appears in galley view.|
  2049. |\ softlheight|Nonrequired line height. This is emitted as a prefix to each |
  2050. |N            |line.                                                        |
  2051. |\ tab        |Tab character; same as ASCII 9.                              |
  2052. |\ emdash     |Em-dash (—).                                                 |
  2053. |\ endash     |En-dash (–).                                                 |
  2054. |\ emspace    |Nonbreaking space equal to width of character "m" in current |
  2055. |             |font.                                                        |
  2056. |\ enspace    |Nonbreaking space equal to width of character "n" in current |
  2057. |             |font.                                                        |
  2058. |\ bullet     |Bullet character.                                            |
  2059. |\ lquote     |Left single quotation mark.                                  |
  2060. |\ rquote     |Right single quotation mark.                                 |
  2061. |\ ldblquote  |Left double quotation mark.                                  |
  2062. |\ rdblquote  |Right double quotation mark.                                 |
  2063. |\ |          |Formula character.                                           |
  2064. |\ ~          |Nonbreaking space.                                           |
  2065. |\ -          |Optional hyphen.                                             |
  2066. |\ _          |Nonbreaking hyphen.                                          |
  2067. |\ :          |Specifies a subentry in an index entry.                      |
  2068. |\ *          |Marks a destination whose text should be ignored if not      |
  2069. |             |understood by the RTF reader.                                |
  2070. |\ 'hh        |A hexadecimal value, based on the specified character set    |
  2071. |             |(may be used to identify 8-bit values).                      |
  2072. |\ ltrmark    |The following characters should be displayed from left to    |
  2073. |             |right; usually found at the start of \ltrch runs.            |
  2074. |\ rtlmark    |The following characters should be displayed from right to   |
  2075. |             |left; usually found at the start of \rtlch runs.             |
  2076. |\ zwj        |Zero-width joiner. This is used to ligate (join) characters. |
  2077. |\ zwnj       |Zero-width nonjoiner. This is used for unligating a          |
  2078. |             |characters.                                                  |
  2079.  
  2080.  
  2081. Note that an ASCII 9 is accepted as a tab character. A carriage return
  2082. (character value 13) or linefeed (character value 10) will be treated as a
  2083. \ par control if the character is preceded by a backslash. You must include
  2084. the backslash, or RTF ignores the control word. (You may also want to
  2085. insert a carriage-return/linefeed pair without backslashes at least every
  2086. 255 characters for better text transmission over communication lines.)
  2087.  
  2088. The following are the code values for the special characters listed.
  2089.  
  2090. |Control word |Word for Windows and   |Apple Macintosh                      |
  2091. |             |OS/2                   |                                     |
  2092. |\ bullet     |149                    |0xA5                                 |
  2093. |\ endash     |150                    |0xD1                                 |
  2094. |\ emdash     |151                    |0xD0                                 |
  2095. |\ lquote     |145                    |0xD4                                 |
  2096. |\ rquote     |146                    |0xD5                                 |
  2097. |\ ldblquote  |147                    |0xD2                                 |
  2098. |\ rdblquote  |148                    |0xD3                                 |
  2099.  
  2100.  
  2101. Bookmarks
  2102.  
  2103. This destination may specify one of two control words: \ *\ bkmkstart,
  2104. which indicates the start of the specified bookmark, and \ *\ bkmkend,
  2105. which indicates the end of the specified bookmark.
  2106.  
  2107. Bookmarks have the following syntax:
  2108.  
  2109. |<book>       |<bookstart> | <bookend>                                      |
  2110. |<bookstart>  |'{\ *' \ bkmkstart ( \ bkmkcolf? & \ bkmkcoll?) #PCDATA '}'  |
  2111. |<bookend>    |'{\ *' \ bkmkend #PCDATA '}'                                 |
  2112.  
  2113.  
  2114. A bookmark is shown in the following example:
  2115.  
  2116.    \pard\plain \fs20 Kuhn believes that science, rather than
  2117.    discovering in experience certain structured
  2118.    relationships, actually creates (or already participates in)
  2119.    a presupposed structure to which it fits the data.
  2120.    {\bkmkstart paradigm} Kuhn calls such a presupposed
  2121.    structure a paradigm.{\bkmkend paradigm}
  2122.  
  2123. The bookmark start and the bookmark end are matched with the bookmark tag.
  2124. In the example, the bookmark tag was "paradigm." Each bookmark start should
  2125. have a matching bookmark end; however, the bookmark start and the bookmark
  2126. end may be in any order.
  2127.  
  2128. \ bkmkcolfN is used to denote the first column of a table covered by a
  2129. bookmark. If it is not included, the first column is assumed. \ bkmkcollN
  2130. is used to denote the last column. If it is not used, the last column is
  2131. assumed. These controls are used within the \ *\ bkmkstart destination
  2132. following the \ bkmkstart control. For example,
  2133. {\ *\ bkmkstart\ bkmkcolf2\ bkmkcoll5 Table1} places the bookmark "Table1"
  2134. on columns 2 through 5 of a table.
  2135.  
  2136.  
  2137. Pictures
  2138.  
  2139. An RTF file can include pictures created with other applications. These
  2140. pictures can be in hexadecimal (the default) or binary format. Pictures are
  2141. destinations, and begin with the \ pict control word. A picture destination
  2142. has the following syntax:
  2143.  
  2144. |<pict>        |'{' \ pict (<brdr>? & <shading>? & <picttype> & <pictsize> |
  2145. |              |& <metafileinfo>?) <data> '}'                              |
  2146. |<picttype>    |\ macpict | \ pmmetafile | \ wmetafile | \ dibitmap        |
  2147. |              |<bitmapinfo> | \ wbitmap <bitmapinfo>                      |
  2148. |<bitmapinfo>  |\ wbmbitspixel & \ wbmplanes & \ wbmwidthbytes             |
  2149. |<pictsize>    |( \ picw & \ pich) \picwgoal? & \pichgoal? \ picscalex? &  |
  2150. |              |\ picscaley? & \ picscaled? & \ piccropt? & \ piccropb? &  |
  2151. |              |\ piccropr? & \ piccropl?                                  |
  2152. |<metafileinfo>|\picbmp & \picbpp                                          |
  2153. |<data>        |( \ bin #BDATA) | #SDATA                                   |
  2154.  
  2155.  
  2156. These control words are described in the following table (some measurements
  2157. in this table are in twips; a twip is one-twentieth of a point).
  2158.  
  2159. |Control word  |Meaning                                                    |
  2160. |\ macpict     |Source of the picture is QuickDraw.                        |
  2161. |\ pmmetafileN |Source of the picture is an OS/2 metafile; the N argument  |
  2162. |              |identifies the metafile type. The N values are descibed on |
  2163. |              |page 40 of this Application Note.                          |
  2164. |\ wmetafileN  |Source of the picture is a Windows metafile; the N argument|
  2165. |              |identifies the metafile type (the default is 1).           |
  2166. |\ dibitmapN   |Source of the picture is a Windows device-independent      |
  2167. |              |bitmap; the N argument identifies the bitmap type (must    |
  2168. |              |equal 0).                                                  |
  2169. |              |The information to be included in RTF from a Windows       |
  2170. |              |device-independent bitmap is the concatenation of the      |
  2171. |              |BITMAPINFO structure followed by the actual pixel data.    |
  2172. |\ wbitmapN    |Source of the picture is a Windows device-dependent bitmap;|
  2173. |              |the N argument identifies the bitmap type (must equal 0).  |
  2174. |              |The information to be included in RTF from a Windows       |
  2175. |              |device-dependent bitmap is the result of the GetBitmapBits |
  2176. |              |function.                                                  |
  2177.  
  2178.  
  2179. For more information on the GetDIBits and GetBitmapBits functions and the
  2180. structure of Windows device-independent and device-dependent bitmaps, see
  2181. Volume 1 and Volume 2 of the Programmer's Reference in the Microsoft
  2182. Windows 3.1 Software Development Kit. For best device-independence and
  2183. interoperability with Microsoft products, however, use of the \wbitmap and
  2184. \dibitmap control words is discouraged. Rather, bitmaps should be embedded
  2185. within Windows metafiles and the \wmetafile control word used. For more
  2186. information on embedding bitmaps within metafiles, see Volume 1 and Volume
  2187. 2 of the Programmer's Reference in the Microsoft Windows 3.1 Software
  2188. Development Kit.
  2189.  
  2190. |Control word  |Meaning                                                    |
  2191. |Bitmap Information                                                        |
  2192. |\ wbmbitspixel|Number of adjacent color bits on each plane needed to      |
  2193. |N             |define a pixel (the default is 1).  Possible values are 1  |
  2194. |              |(monochrome), 4 (16 colors), 8 (256 colors) and 24 (RGB).  |
  2195. |\ wbmplanesN  |Number of bitmap color planes (must equal 1).              |
  2196. |\ wbmwidthbyte|Specifies the number of bytes in each raster line. This    |
  2197. |sN            |value must be an even number since the Windows graphics    |
  2198. |              |device interface (GDI) assumes that the bit values of a    |
  2199. |              |bitmap form an array of integer (two-byte) values. In other|
  2200. |              |words, \wbmwidthbytes times 8 must be the next multiple of |
  2201. |              |16 greater than or equal to the \picw (bitmap width in     |
  2202. |              |pixels) value.                                             |
  2203. |Picture Size, Scaling, and Cropping                                       |
  2204. |\ picwN       |xExt field if the picture is a Windows metafile; picture   |
  2205. |              |width in pixels if the picture is a bitmap or from         |
  2206. |              |QuickDraw.                                                 |
  2207. |\ pichN       |yExt field if the picture is a Windows metafile; picture   |
  2208. |              |height in pixels if the picture is a bitmap or from        |
  2209. |              |QuickDraw.                                                 |
  2210. |\ picwgoalN   |Desired width of the picture in twips.                     |
  2211. |\ pichgoalN   |Desired height of the picture in twips.                    |
  2212. |\ picscalexN  |Horizontal scaling value; the N argument is a value        |
  2213. |              |representing a percentage (the default is 100).            |
  2214. |\ picscaleyN  |Vertical scaling value; the N argument is a value          |
  2215. |              |representing a percentage (the default is 100).            |
  2216. |\ picscaled   |Scales the picture to fit within the specified frame; used |
  2217. |              |only with \ macpict pictures.                              |
  2218. |\ piccroptN   |Top cropping value in twips; a positive value crops toward |
  2219. |              |the center of the picture; a negative value crops away from|
  2220. |              |the center, adding a space border around picture (the      |
  2221. |              |default is 0).                                             |
  2222. |\ piccropbN   |Bottom cropping value in twips; a positive value crops     |
  2223. |              |toward the center of the picture; a negative value crops   |
  2224. |              |away from the center, adding a space border around picture |
  2225. |              |(the default is 0).                                        |
  2226. |\ piccroplN   |Left cropping value in twips; a positive value crops toward|
  2227. |              |the center of the picture; a negative value crops away from|
  2228. |              |the center, adding a space border around picture (the      |
  2229. |              |default is 0).                                             |
  2230. |\ piccroprN   |Right cropping value in twips; a positive value crops      |
  2231. |              |toward the center of the picture; a negative value crops   |
  2232. |              |away from the center, adding a space border around picture |
  2233. |              |(the default is 0).                                        |
  2234. |Metafile Information                                                      |
  2235. |\ picbmp      |Specifies whether a metafile contains a bitmap.            |
  2236. |\ picbppN     |Specifies the bits per pixel in a metafile bitmap. The     |
  2237. |              |valid range is 1–32, with 1, 4, 8, and 24 being recognized.|
  2238. |Picture Data                                                              |
  2239. |\ binN        |The picture is in binary format; the numeric parameter N is|
  2240. |              |the number of bytes that follow. Unlike all other controls,|
  2241. |              |this control word takes a 32-bit parameter.                |
  2242.  
  2243.  
  2244. The \ wbitmap control word is optional; if no other picture type is
  2245. specified, the picture is assumed to be a Windows bitmap. If \ wmetafile is
  2246. specified, the N argument can be one of the following types.
  2247.  
  2248. |Type               |N argument                                             |
  2249. |MM_TEXT            |1                                                      |
  2250. |MM_LOMETRIC        |2                                                      |
  2251. |MM_HIMETRIC        |3                                                      |
  2252. |MM_LOENGLISH       |4                                                      |
  2253. |MM_HIENGLISH       |5                                                      |
  2254. |MM_TWIPS           |6                                                      |
  2255. |MM_ISOTROPIC       |7                                                      |
  2256. |MM_ANISOTROPIC     |8                                                      |
  2257.  
  2258.  
  2259. For more information about these types, see volume 1 of the Programmer’s
  2260. Reference in the Microsoft Windows 3.1 Software Development Kit.
  2261.  
  2262. If \ pmmetafile is specified, the N argument can be one of the following
  2263. types.
  2264.  
  2265. |Type               |N argument                                             |
  2266. |PU_ARBITRARY       |0x0004                                                 |
  2267. |PU_PELS            |0x0008                                                 |
  2268. |PU_LOMETRIC        |0x000C                                                 |
  2269. |PU_HIMETRIC        |0x0010                                                 |
  2270. |PU_LOENGLISH       |0x0014                                                 |
  2271. |PU_HIENGLISH       |0x0018                                                 |
  2272. |PU_TWIPS           |0x001C                                                 |
  2273.  
  2274.  
  2275. For more information about these types, see volume 2 of the OS/2
  2276. Programmer’s Reference.
  2277.  
  2278. Be careful with spaces following control words when dealing with pictures
  2279. in binary format. When reading files, RTF considers the first space after a
  2280. control word the delimiter and subsequent spaces part of the document text.
  2281. Therefore, any extra spaces are attached to the picture, with unpredictable
  2282. results.
  2283.  
  2284. RTF writers should not use the carriage-return/linefeed (CR/LF) combination
  2285. to break up pictures in binary format. If they do, the CR/LF combination is
  2286. treated as literal text and considered part of the picture data.
  2287.  
  2288. The picture in hexadecimal or binary format follows the picture-destination
  2289. control words. The following example illustrates the destination format:
  2290.  
  2291.    {\pict\wbitmap0\picw170\pich77\wbmbitspixel1\wbmplanes1\wbmwidthbytes22
  2292.    \picwgoal505
  2293.    \pichgoal221
  2294.    \picscalex172
  2295.    \picscaley172
  2296.    49f2000000000273023d1101a030
  2297.    3901000a000000000273023d98
  2298.    0048000200000275
  2299.    02040000200010275023e000000000
  2300.    273023d000002b90002b90002
  2301.    b90002b90002b9
  2302.    0002b90002b90002b90002b90002b90002
  2303.    b92222b90002b90002b90
  2304.    002b90002b9
  2305.    0002b90002b90002b90002b9000
  2306.  
  2307.  
  2308. Objects
  2309.  
  2310. Microsoft OLE links, Microsoft OLE embedded objects, and Macintosh Edition
  2311. Manager subscriber objects are represented in RTF as objects. Objects are
  2312. destinations that contain a data part and a result part. The data part is
  2313. generally hidden to the application that produced the document. A separate
  2314. application uses the data and supplies the appearance of the data. This
  2315. appearance is the result part of the object.
  2316.  
  2317. The representation of objects in RTF is designed to allow RTF readers that
  2318. don't understand objects or don't use a particular type of object to use
  2319. the current result in place of the object. This allows the appearance of
  2320. the object to be maintained through the conversion even though the object
  2321. functionality is lost. Each object comes with optional information about
  2322. the object, a required destination that contains the object data, and an
  2323. optional result that contains the current appearance of the object. This
  2324. result contains standard RTF. It is an important responsibility of the RTF
  2325. writer to provide the result so that existing RTF readers that either do
  2326. not support objects or that do not support the particular type of object
  2327. will be able to display the object.
  2328.  
  2329. When the object is an OLE embedded or linked object, the data part of the
  2330. object is the structure produced by the OLESaveToStream function. Some OLE
  2331. clients rely on the OLE system to render the object and a copy of the
  2332. result is not available to the RTF writer for that application. For these
  2333. cases, the object result can be extracted from the structure produced by
  2334. the OLESaveToStream function. For information about the OLESaveToStream
  2335. function, see the Microsoft Object Linking and Embedding Software
  2336. Development Kit.
  2337.  
  2338. The syntax for this destination is:
  2339.  
  2340. |<obj>        |( '{' \ object (<objtype> & <objmod>? & <objclass>? &        |
  2341. |             |<objname>? & <objtime>? & <objsize>? & <rsltmod>?) <objdata> |
  2342. |             |<result> '}' ) | <pubobject>                                 |
  2343. |<objtype>    |\ objemb | \ objlink | \ objautlink | \ objsub | \ objpub |  |
  2344. |             |\ objicemb                                                   |
  2345. |<objmod>     |\ linkself? & \ objlock? | \objupdate?                       |
  2346. |<objclass>   |'{\ *' \ objclass #PCDATA '}'                                |
  2347. |<objname>    |'{\ *' \ objname #PCDATA '}'                                 |
  2348. |<objtime>    |'{\ *' \ objtime <time> '}'                                  |
  2349. |<rsltmod>    |\ rsltmerge? & <rslttype>?                                   |
  2350. |<rslttype>   |\ rsltrtf | \ rslttxt | \ rsltpict | \ rsltbmp               |
  2351. |<objsize>    |\ objsetsize? & \ objalign? & \ objtransy? & <objhw>? &      |
  2352. |             |\ objcropt? & \ objcropb? & \ objcropl? & \ objcropr? &      |
  2353. |             |\ objscalex? & \ objscaley?                                  |
  2354. |<objhw>      |\ objh & \ objw                                              |
  2355. |<objdata>    |'{\ *' \ objdata (<objalias>? & <objsect>?) <data> '}'       |
  2356. |<objalias>   |'{\ *' \ objalias <data> '}'                                 |
  2357. |<objsect>    |'{\ *' \ objsect <data> '}'                                  |
  2358. |<result>     |'{' \ result <para>+ '}'                                     |
  2359.  
  2360.  
  2361.  
  2362.  
  2363.    |Control word |Meaning                                                      |
  2364. |Object Type                                                               |
  2365. |\ objemb     |An object type of OLE embedded object. If no type is given   |
  2366. |             |for the object, the object is assumed to be of type \ objemb.|
  2367. |\ objlink    |An object type of OLE link.                                  |
  2368. |\ objautlink |An object type of OLE autolink.                              |
  2369. |\ objsub     |An object type of Macintosh Edition Manager subscriber.      |
  2370. |\ objpub     |An object type of Macintosh Edition Manager publisher.       |
  2371. |\ objicemb   |An object type of MS® Word for the Macintosh Installable     |
  2372. |             |Command (IC) Embedder.                                       |
  2373. |Object Information                                                        |
  2374. |\ linkself   |The object is a link to another part of the same document.   |
  2375. |\ objlock    |Locks the object from any updates.                           |
  2376. |\ objupdate  |Forces an update to the object before displaying it. Note    |
  2377. |             |that this will override any values in the <objsize> control  |
  2378. |             |words, but reasonable values should always be provided for   |
  2379. |             |these to maintain backwards compatibility.                   |
  2380. |\ objclass   |The text argument is the object class to use for this object;|
  2381. |             |ignore the class specified in the object data. This is a     |
  2382. |             |destination control word.                                    |
  2383. |\ objname    |The text argument is the name of this object. This is a      |
  2384. |             |destination control word.                                    |
  2385. |\ objtime    |Describes the time that the object was last updated.         |
  2386. |Object Size, Position, Cropping, and Scaling                              |
  2387. |\ objhN      |N is the original object height in twips, assuming the object|
  2388. |             |has a graphical representation.                              |
  2389. |\ objwN      |N is the original object width in twips, assuming the object |
  2390. |             |has a graphical representation.                              |
  2391. |\ objsetsize |Forces the object server to set the object's dimensions to   |
  2392. |             |that specified by the client.                                |
  2393. |\ objalignN  |N is the distance in twips from the left edge of the objects |
  2394. |             |that should be aligned on a tab stop. This is needed to place|
  2395. |             |Equation Editor equations correctly in line.                 |
  2396. |\ objtransyN |N is the distance in twips the objects should be moved       |
  2397. |             |vertically with respect to the baseline. This is needed to   |
  2398. |             |place Math Type equations correctly in line.                 |
  2399. |\ objcroptN  |N is the top cropping distance in twips.                     |
  2400. |\ objcropbN  |N is the bottom cropping distance in twips.                  |
  2401. |\ objcroplN  |N is the left cropping distance in twips.                    |
  2402. |\ objcroprN  |N is the right cropping distance in twips.                   |
  2403. |\ objscalexN |N is the horizontal scaling percentage.                      |
  2404. |\ objscaleyN |N is the vertical scaling percentage.                        |
  2405. |Object Data                                                               |
  2406. |\ objdata    |This subdestination contains the data for the object in the  |
  2407. |             |appropriate format; OLE objects are in OLESaveToStream       |
  2408. |             |format. This is a destination control word.                  |
  2409. |\ objalias   |This subdestination contains the Alias Record for the        |
  2410. |             |publisher object for the Macintosh Edition Manager. This is a|
  2411. |             |destination control word.                                    |
  2412. |\ objsect    |This subdestination contains the Section Record for the      |
  2413. |             |publisher object for the Macintosh Edition Manager. This is a|
  2414. |             |destination control word.                                    |
  2415. |Object Result                                                             |
  2416. |\ rsltrtf    |Forces the result to be rich-text format, if possible.       |
  2417. |\ rsltpict   |Forces the result to be a Windows metafile or MacPict image  |
  2418. |             |format, if possible.                                         |
  2419. |\ rsltbmp    |Forces the result to be a bitmap, if possible.               |
  2420. |\ rslttxt    |Forces the result to be plain text, if possible.             |
  2421. |\ rsltmerge  |Uses the formatting of the current result whenever a new     |
  2422. |             |result is obtained.                                          |
  2423. |\ result     |The result destination is optional in the \ object           |
  2424. |             |destination. It contains the last update of the result of the|
  2425. |             |object. The data of the result destination should be standard|
  2426. |             |RTF so that RTF readers that don't understand objects or the |
  2427. |             |type of object represented can use the current result in the |
  2428. |             |object's place to maintain appearance. This is a destination |
  2429. |             |control word.                                                |
  2430.  
  2431.  
  2432. Macintosh Edition Manager Publisher Objects
  2433.  
  2434. Word for the Macintosh writes publisher objects for the Macintosh Edition
  2435. Manager in terms of bookmarks (see "Bookmarks" on page 38 of this
  2436. Application Note). The range of publisher objects are marked as bookmarks,
  2437. so these controls are all used within the \ bkmkstart destination. The RTF
  2438. syntax for a publisher object is:
  2439.  
  2440. |<pubobject>  |'{\ *' \ bkmkstart \ bkmkpub \ pubauto? (<objalias>? &       |
  2441. |             |<objsect>) #PCDATA '}'                                       |
  2442. |Control word |Meaning                                                      |
  2443. |\ bkmkpub    |The bookmark marks a Macintosh Edition Manager publisher     |
  2444. |             |object.                                                      |
  2445. |\ pubauto    |The publisher object updates all Macintosh Edition Manager   |
  2446. |             |subscribers of this object automatically whenever it is      |
  2447. |             |edited.                                                      |
  2448.  
  2449.  
  2450. Drawing Objects
  2451.  
  2452. Drawing objects and the drawing primitives enumerated within drawing object
  2453. groups use the syntax described by the following tables.
  2454.  
  2455. |<do>         |'{\ *' \ do <dohead> <dpinfo>'}'                             |
  2456. |<dohead>     |<dobx> <doby> <dodhgt> <dolock>?                             |
  2457. |<dobx>       |\ dobxpage | \ dobxcolumn | \ dobxmargin                     |
  2458. |<doby>       |\ dobypage | \ dobypara | \ dobymargin                       |
  2459. |<dodhgt>     |\ dodhgt                                                     |
  2460. |<dolock>     |\ dolock                                                     |
  2461. |<dpinfo>     | <dpgroup> | <dpcallout> | <dpsimple>                        |
  2462. |<dpgroup>    |\ dpgroup \ dpcount <dphead> <dpinfo>+ \ dpendgroup <dphead> |
  2463. |<dpcallout>  |\ dpcallout <cotype> <coangle>? <coaccent>? <cosmartattach>? |
  2464. |             |<cobestfit>? <cominusx>? <cominusy>? <coborder>? <codescent>?|
  2465. |             |\ dpcooffset \ dpcolength <dphead> <dppolyline> <dphead>     |
  2466. |             |<dpprops> <dptextbox> <dphead> <dpprops>                     |
  2467. |<dpsimple>   |<dpsimpledpk> <dphead> <dpprops>                             |
  2468. |<dpsimpledpk>|<dpline> | <dprect> | <dptextbox> | <dpellipse> |            |
  2469. |             |<dppolyline> | <dparc>                                       |
  2470. |<dpline>     |\ dpline <dppt> <dppt>                                       |
  2471. |<dprect>     |\ dprect (\ dproundr)?                                       |
  2472. |<dptextbox>  |\ dptxbx \ dptxbxmar '{' \ dptxbxtext <para>+'}'             |
  2473. |<dpellipse>  |\ dpellipse                                                  |
  2474. |<dparc>      |\ dparc \ dparcflipx? \ dparcflipy?                          |
  2475. |<dppolyline> |\ dppolyline (\ dppolygon)? \ dppolycount <dppt>+            |
  2476. |<dppt>       |\ dpptx \ dppty                                              |
  2477. |<dphead>     |\ dpx \ dpy \ dpxsize \ dpysize                              |
  2478.  
  2479.  
  2480. Note that in <dpgroup> the number of <dpinfo>s is equal to the argument of
  2481. \ dpcount, while in <dppolyline> the number of <dppt>s is equal to the
  2482. argument of \ dppolycount.
  2483.  
  2484. The following elements of the drawing-object syntax pertain specifically to
  2485. callout objects:
  2486.  
  2487. |<cotype>     |\ dpcotright | \ dpcotsingle | \ dpcotdouble | \ dpcottriple |
  2488. |<coangle>    |\ dpcoa                                                      |
  2489. |<coaccent>   |\ dpcoaccent                                                 |
  2490. |<cosmartattac|\ dpcosmarta                                                 |
  2491. |h>           |                                                             |
  2492. |<cobestfit>  |\ dpcobestfit                                                |
  2493. |<cominusx>   |\ dpcominusx                                                 |
  2494. |<cominusy>   |\ dpcominusy                                                 |
  2495. |<coborder>   |\ dpcoborder                                                 |
  2496. |<codescent>  |\ dpcodtop | \ dpcodcenter | \ dpcodbottom | \ dpcodabs      |
  2497.  
  2498.  
  2499. The remaining elements of the drawing object syntax are properties applied
  2500. to individual drawn primitives:
  2501.  
  2502. |<dpprops>    |<lineprops>? <fillprops>? <endstylestart>? <endstyleend>?    |
  2503. |             |<shadow>?                                                    |
  2504. |<lineprops>  |<linestyle> <linecolor> \ dplinew                            |
  2505. |<linestyle>  |\ dplinesolid | \ dplinehollow | \ dplinedash | \ dplinedot ||
  2506. |             |\ dplinedado | \ dplinedadodo                                |
  2507. |<linecolor>  |<linegray> | <linergb>                                       |
  2508. |<linegray>   |\ dplinegray                                                 |
  2509. |<linergb>    |\ dplinecor \ dplinecog \ dplinecob<linepal>?                |
  2510. |<linepal>    |\ dplinepal                                                  |
  2511. |<fillprops>  |<fillcolorfg> <fillcolorbg> \ dpfillpat                      |
  2512. |<fillcolorfg>|<fillfggray> | <fillfgrgb>                                   |
  2513. |<fillfggray> |\ dpfillfggray                                               |
  2514. |<fillfgrgb>  |\ dpfillfgcr \ dpfillfgcg \ dpfillfgcb<fillfgpal>?           |
  2515. |<fillfgpal>  |\ dpfillfgpal                                                |
  2516. |<fillcolorbg>|<fillbggray> | <fillbgrgb>                                   |
  2517. |<fillbggray> |\ dpfillbggray                                               |
  2518. |<fillbgrgb>  |\ dpfillbgcr \ dpfillbgcg \ dpfillbgcb<fillbgpal>?           |
  2519. |<fillbgpal>  |\ dpfillbgpal                                                |
  2520. |<endstylestar|<arrowstartfill> \ dpastartl \ dpastartw                     |
  2521. |t>           |                                                             |
  2522. |<arrowstartfi|\ dpastartsol | \ dpastarthol                                |
  2523. |ll>          |                                                             |
  2524. |<endstyleend>|<arrowendfill> \ dpaendl \ dpaendw                           |
  2525. |<arrowendfill|\ dpaendsol | \ dpaendhol                                    |
  2526. |>            |                                                             |
  2527. |<shadow>     |\ dpshadow \ dpshadx \ dpshady                               |
  2528.  
  2529.  
  2530. The following table describes the control words for the drawing object
  2531. group in detail. All color values are RGB values between 0-255. All
  2532. distances are in twips. All other values are as indicated.
  2533.  
  2534. |Control word |Definition                                                   |
  2535. |\ do         |Indicates a drawing object is to be inserted at this point in|
  2536. |             |the character stream. This is a destination control word.    |
  2537. |\ dolock     |The drawing object's anchor is locked and cannot be moved.   |
  2538. |\ dobxpage   |The drawing object is page relative in the x-direction.      |
  2539. |\ dobxcolumn |The drawing object is column relative in the x-direction.    |
  2540. |\ dobxmargin |The drawing object is margin relative in the x-direction.    |
  2541. |\ dobypage   |The drawing object is page relative in the y-direction.      |
  2542. |\ dobypara   |The drawing object is paragraph relative in the y-direction. |
  2543. |\ dobymargin |The drawing object is margin relative in the y-direction.    |
  2544. |\ dodhgtN    |The drawing object is positioned at the following numeric    |
  2545. |             |address in the z-ordering.                                   |
  2546. |Drawing Primitives                                                        |
  2547. |\ dpgroup    |Begin group of drawing primitives.                           |
  2548. |\ dpcountN   |Number of drawing primitives in the current group.           |
  2549. |\ dpendgroup |End group of drawing primitives.                             |
  2550. |\ dparc      |Arc drawing primitive.                                       |
  2551. |\ dpcallout  |Callout drawing primitive, which consists of both a polyline |
  2552. |             |and a text box.                                              |
  2553. |\ dpellipse  |Ellipse drawing primitive.                                   |
  2554. |\ dpline     |Line drawing primitive.                                      |
  2555. |\ dppolygon  |Polygon drawing primitive (closed polyline).                 |
  2556. |\ dppolyline |Polyline drawing primitive.                                  |
  2557. |\ dprect     |Rectangle drawing primitive.                                 |
  2558. |\ dptxbx     |Text box drawing primitive.                                  |
  2559. |Position and Size                                                         |
  2560. |\ dpxN       |X-offset of the drawing primitive from its anchor.           |
  2561. |\ dpxsizeN   |X-size of the drawing primitive.                             |
  2562. |\ dpyN       |Y-offset of the drawing primitive from its anchor.           |
  2563. |\ dpysizeN   |Y-size of the drawing primitive.                             |
  2564. |Callouts                                                                  |
  2565. |\ dpcoaN     |Angle of callout's diagonal line is restricted to one of the |
  2566. |             |following: 0, 30, 45, 60, or 90. If this control word is     |
  2567. |             |absent, the callout has an arbitrary angle, indicated by the |
  2568. |             |coordinates of its primitives.                               |
  2569. |\ dpcoaccent |Accent bar on callout (vertical bar between polyline and text|
  2570. |             |box).                                                        |
  2571. |\ dpcobestfit|Best fit callout (x-length of each line in callout is        |
  2572. |             |similar).                                                    |
  2573. |\ dpcoborder |Visible border on callout text box.                          |
  2574. |\ dpcodabsN  |Absolute distance-attached polyline. N is the offset in twips|
  2575. |             |from the corner that an auto-attached callout would attach   |
  2576. |             |to.                                                          |
  2577. |\ dpcodbottom|Bottom-attached polyline.                                    |
  2578. |\ dpcodcenter|Center-attached polyline.                                    |
  2579. |\ dpcodtop   |Top-attached callout.                                        |
  2580. |\ dpcolengthN|Length of callout.                                           |
  2581. |\ dpcominusx |Text box falls in quadrants II or III relative to polyline   |
  2582. |             |origin.                                                      |
  2583. |\ dpcominusy |Text box falls in quadrants III or IV relative to polyline   |
  2584. |             |origin.                                                      |
  2585. |\ dpcooffsetN|Offset of callout. This is the distance between the end of   |
  2586. |             |the polyline and the edge of the text box.                   |
  2587. |\ dpcosmarta |Auto-attached callout. Polyline will attach to either the top|
  2588. |             |or bottom of the text box depending on the relative quadrant.|
  2589. |\ dpcotdouble|Double line callout.                                         |
  2590. |\ dpcotright |Right angle callout.                                         |
  2591. |\ dpcotsingle|Single line callout.                                         |
  2592. |\ dpcottriple|Triple line callout.                                         |
  2593. |Text Boxes and Rectangles                                                 |
  2594. |\ dptxbxmarN |Internal margin of the text box.                             |
  2595. |\ dptxbxtext |Group that contains the text of the text box.                |
  2596. |\ dproundr   |Rectangle is a round rectangle.                              |
  2597. |Lines and Polylines                                                       |
  2598. |\ dpptxN     |X-coordinate of the current vertex (only for lines and       |
  2599. |             |polylines). The coordinate order for a point must be x, y.   |
  2600. |\ dpptyN     |Y-coordinate of the current vertex (only for lines and       |
  2601. |             |polylines). The coordinate order for a point must be x, y.   |
  2602. |\ dppolycount|Number of vertices in polyline drawing primitive.            |
  2603. |N            |                                                             |
  2604. |Arcs                                                                      |
  2605. |\ dparcflipx |This indicates that the end point of the arc is to the right |
  2606. |             |of the start point. Arcs are                                 |
  2607. |             |drawn counter-clockwise.                                     |
  2608. |\ dparcflipy |This indicates that the end point of the arc is below the    |
  2609. |             |start point. Arcs are drawn counter-clockwise.               |
  2610. |Line Style                                                                |
  2611. |\ dplinecobN |Blue value for line color.                                   |
  2612. |\ dplinecogN |Green value for line color.                                  |
  2613. |\ dplinecorN |Red value for line color.                                    |
  2614. |\ dplinepal  |Render line color using the PALETTERGB macro instead of the  |
  2615. |             |RGB macro in Windows.                                        |
  2616. |\ dplinedado |Dashed-dotted line style.                                    |
  2617. |\ dplinedadod|Dashed-dotted-dotted line style.                             |
  2618. |o            |                                                             |
  2619. |\ dplinedash |Dashed line style.                                           |
  2620. |\ dplinedot  |Dotted line style.                                           |
  2621. |\ dplinegrayN|Grayscale value for line color (in half-percentages).        |
  2622. |\ dplinehollo|Hollow line style (no line color).                           |
  2623. |w            |                                                             |
  2624. |\ dplinesolid|Solid line style.                                            |
  2625. |\ dplinewN   |Thickness of line (in twips).                                |
  2626. |Arrow Style                                                               |
  2627. |\ dpaendhol  |Hollow end arrow (lines only).                               |
  2628. |\ dpaendlN   |Length of end arrow, relative to pen width:                  |
  2629. |             |1 Small                                                      |
  2630. |             |2 Medium                                                     |
  2631. |             |3 Large                                                      |
  2632. |\ dpaendsol  |Solid end arrow (lines only).                                |
  2633. |\ dpaendwN   |Width of end arrow, relative to pen width:                   |
  2634. |             |1 Small                                                      |
  2635. |             |2 Medium                                                     |
  2636. |             |3 Large                                                      |
  2637. |\ dpastarthol|Hollow start arrow (lines only).                             |
  2638. |\ dpastartlN |Length of start arrow, relative to pen width:                |
  2639. |             |1 Small                                                      |
  2640. |             |2 Medium                                                     |
  2641. |             |3 Large                                                      |
  2642. |\ dpastartsol|Solid start arrow (lines only).                              |
  2643. |\ dpastartwN |Width of start arrow, relative to pen width:                 |
  2644. |             |1 Small                                                      |
  2645. |             |2 Medium                                                     |
  2646. |             |3 Large                                                      |
  2647. |Fill Pattern                                                              |
  2648. |\ dpfillbgcbN|Blue value for background fill color.                        |
  2649. |\ dpfillbgcgN|Green value for background fill color.                       |
  2650. |\ dpfillbgcrN|Red value for background fill color.                         |
  2651. |\ dpfillbgpal|Render fill background color using the PALETTERGB macro      |
  2652. |             |instead of the RGB macro in Windows.                         |
  2653. |\ dpfillbggra|Grayscale value for background fill (in half-percentages).   |
  2654. |yN           |                                                             |
  2655. |\ dpfillfgcbN|Blue value for foreground fill color.                        |
  2656. |\ dpfillfgcgN|Green value for foreground fill color.                       |
  2657. |\ dpfillfgcrN|Red value for foreground fill color.                         |
  2658. |\ dpfillfgpal|Render fill foreground color using the PALETTERGB macro      |
  2659. |             |instead of the RGB macro in Windows.                         |
  2660. |\ dpfillfggra|Grayscale value for foreground fill (in half-percentages).   |
  2661. |yN           |                                                             |
  2662. |\ dpfillpatN |Index into a list of fill patterns. See below for list.      |
  2663. |Shadow                                                                    |
  2664. |\ dpshadow   |Current drawing primitive has a shadow.                      |
  2665. |\ dpshadxN   |X-offset of the shadow.                                      |
  2666. |\ dpshadyN   |Y-offset of the shadow.                                      |
  2667.  
  2668.  
  2669. The following values are available for specifying fill patterns in drawing
  2670. objects with the \dpfillpat control word.
  2671.  
  2672. |Value   |Fill pattern                                                      |
  2673. |0 (zero)|Clear (no pattern)                                                |
  2674. |1       |Solid (100%)                                                      |
  2675. |2       |5%                                                                |
  2676. |3       |10%                                                               |
  2677. |4       |20%                                                               |
  2678. |5       |25%                                                               |
  2679. |6       |30%                                                               |
  2680. |7       |40%                                                               |
  2681. |8       |50%                                                               |
  2682. |9       |60%                                                               |
  2683. |10      |70%                                                               |
  2684. |11      |75%                                                               |
  2685. |12      |80%                                                               |
  2686. |13      |90%                                                               |
  2687. |14      |Dark horizontal lines                                             |
  2688. |15      |Dark vertical lines                                               |
  2689. |16      |Dark left-diagonal lines (\\\)                                    |
  2690. |17      |Dark right-diagonal lines (///)                                   |
  2691. |18      |Dark grid lines                                                   |
  2692. |19      |Dark trellis lines                                                |
  2693. |20      |Light horizontal lines                                            |
  2694. |21      |Light vertical lines                                              |
  2695. |22      |Light left-diagonal lines (\\\)                                   |
  2696. |23      |Light right-diagonal lines (///)                                  |
  2697. |24      |Light grid lines                                                  |
  2698. |25      |Light trellis lines                                               |
  2699.  
  2700.  
  2701. Footnotes
  2702.  
  2703. The \ footnote control word introduces a footnote. Footnotes are
  2704. destinations in RTF. A footnote is anchored to the character that
  2705. immediately precedes the footnote destination (that is, the footnote moves
  2706. with the character to which it is anchored). If automatic footnote
  2707. numbering is defined, the destination can be preceded by a footnote
  2708. reference character, identified by the control word \ chftn. No Microsoft
  2709. product supports footnotes within headers, footers, or annotations. Placing
  2710. a footnote within headers, footers, or annotations will often result in a
  2711. corrupt document.
  2712.  
  2713. Footnotes have the following syntax.
  2714.  
  2715. |<foot>       |'{\ *' \ footnote <para>+ '}'                                |
  2716.  
  2717.  
  2718. Here is an example of a destination containing footnotes:
  2719.  
  2720.    \ftnbj\ftnrestart \sectd \linemod0\linex0\endnhere \pard\plain
  2721.    \ri1170 \fs20 {\pu6 Mead's landmark study has been amply
  2722.    annotated.\chftn
  2723.    {\*\footnote \pard\plain \s246 \fs20 {\up6\chftn }See Sahlins, Bateson,
  2724.    and
  2725.    Geertz for a complete bibliography.}
  2726.    It was her work in America during the Second World War, however, that
  2727.    forms
  2728.    the basis for the paper. As others have noted, \chftn
  2729.    {\*\footnote \pard\plain \s246 \fs20 {\up6\chftn}
  2730.    A complete bibliography will be found at the end of this chapter.}
  2731.    this period was a turning point for Margaret Mead.}
  2732.    \par
  2733.  
  2734. To indicate endnotes, the following combination is emitted:
  2735. \ footnote\ ftnalt. Existing readers will ignore the \ ftnalt control word
  2736. and treat everything as a footnote.
  2737.  
  2738. For other control words relating to footnotes, see the sections titled
  2739. "Document Formatting Properties" (page 15), "Section Formatting Properties"
  2740. (page 19), and "Special Characters" (page 36) in this Application Note.
  2741.  
  2742.  
  2743. Annotations
  2744.  
  2745. RTF annotations have two parts; the author ID (introduced by the control
  2746. word \ atnid) and the annotation text (introduced by the control word
  2747. \ annotation); there is no group enclosing both parts. No Microsoft product
  2748. supports annotations within headers, footers, or footnotes. Placing an
  2749. annotation within headers, footers, or footnotes will often result in a
  2750. corrupt document. Each part of the annotation is an RTF destination.
  2751. Annotations are anchored to the character that immediately precedes the
  2752. annotation.
  2753.  
  2754. If an annotation is associated with an annotation bookmark, the following
  2755. two destination control words precede and follow the bookmark. The
  2756. alphanumeric string N, such as a long integer, represents the bookmark
  2757. name.
  2758.  
  2759. |<atrfstart>  |'{\ *' \ atrfstart N '}'                                     |
  2760. |< atrfend>   |'{\ *' \ atrfend N '}'                                       |
  2761.  
  2762.  
  2763. Annotations have the following syntax:
  2764.  
  2765. |<annot>      |<annotid> <atnauthor> <atntime>? \ chatn <atnicn>? <annotdef>|
  2766. |<annotid>    |'{\ *' \ atnid #PCDATA '}'                                   |
  2767. |< atnauthor> |'{\*' \atnauthor #PCDATA '}'                                 |
  2768. |<annotdef>   |'{\ *' \ annotation <atnref> <para>+ '}'                     |
  2769. |< atnref>    |'{\ *' \ atnref N '}'                                        |
  2770. |<atntime>    |'{\ *' \ atntime <time> '}'                                  |
  2771. |<atnicn>     |'{\ *' \ atnicn <pict> '}'                                   |
  2772.  
  2773.  
  2774. An example of annotation text follows:
  2775.  
  2776.    An example of a paradigm might be Newtonian physics or
  2777.    Darwinian biology.{\v\fs16 {\atnid bz}\chatn{\*\annotation
  2778.    \pard\plain \s224 \fs20 {\field{\fldinst page \\#'"Page:
  2779.    '#'\line'"}{\fldrslt}}{\fs16 \chatn }
  2780.    How about some examples that deal with social science?
  2781.    That's what this paper is about.}}
  2782.  
  2783. Annotations may have optional time stamps (contained in the \ atntime
  2784. destination) or icons (contained in the \ atnicn destination).
  2785.  
  2786.  
  2787. Fields
  2788.  
  2789. The \ field control word introduces a field destination, which contains the
  2790. text of Word for Windows fields.
  2791.  
  2792. Fields have the following syntax:
  2793.  
  2794. |<field>      |'{' \ field <fieldmod>? <fieldinst> <fieldrslt> '}'          |
  2795. |<fieldmod>   |\ flddirty? & \ fldedit? & \ fldlock? & \ fldpriv?           |
  2796. |<fieldinst>  |'{\ *' \ fldinst <char>+ <fldalt>? '}'                       |
  2797. |<fldalt>     |\ fldalt                                                     |
  2798. |<fieldrslt>  |'{\ *' \ fldrslt <para>+ '}'                                 |
  2799.  
  2800.  
  2801. There are several control words that alter the interpretation of the field.
  2802. These control words are listed in the following table.
  2803.  
  2804. |Control word |Meaning                                                      |
  2805. |\ flddirty   |A formatting change has been made to the field result since  |
  2806. |             |the field was last updated.                                  |
  2807. |\ fldedit    |Text has been added to, or removed from, the field result    |
  2808. |             |since the field was last updated.                            |
  2809. |\ fldlock    |Field is locked and cannot be updated.                       |
  2810. |\ fldpriv    |Result is not in a form suitable for display (for example,   |
  2811. |             |binary data used by fields whose result is a picture).       |
  2812.  
  2813.  
  2814. Two subdestinations are required within the \ field destination. They must
  2815. be enclosed in braces ({ }) and begin with the following control words.
  2816.  
  2817. |Control word |Meaning                                                      |
  2818. |\ fldinst    |Field instructions. This is a destination control word.      |
  2819. |\ fldrslt    |Most recent calculated result of the field. This is a        |
  2820. |             |destination control word.                                    |
  2821.  
  2822.  
  2823. If the instruction for a field contains a filename, then the \ cpg control
  2824. can be used to define the character set of the filename. See â€œCode Page
  2825. Support” on page 9 of this Application Note for details.
  2826.  
  2827. The \ fldrslt control word should be included even if no result has been
  2828. calculated because most readers (even those readers that do not recognize
  2829. fields) can generally include the value of the \ fldrslt destination in the
  2830. document.
  2831.  
  2832. An example of some field text follows:
  2833.  
  2834.    {\field\fldedit{\fldinst author}{\fldrslt Joe Smith}}\par\pard
  2835.    {\field{\fldinst time \\@ "h:mm AM/PM"}{\fldrslt 8:12 AM}}
  2836.  
  2837. You can use the \fldalt control word to specify that the given field
  2838. reference is to an endnote. For example, the following field in RTF is a
  2839. reference to a footnote:
  2840.  
  2841.    {\ field{\ *\ fldinst NOTEREF _RefNumber } {\ fldrslt 1}}
  2842.  
  2843. The following is an example of a reference to an endnote:
  2844.  
  2845.    {\ field{\ *\ fldinst NOTEREF _RefNumber \ fldalt } {\ fldrslt I}}
  2846.  
  2847. If the specified field is a form field, the \*\datafield destination
  2848. appears as a part of <char> and contains the binary data of a form field
  2849. instruction. For example:
  2850.  
  2851.    {\ field{\*\fldinst {\*\bkmkstart Text1} FORMTEXT {{\*\datafield
  2852.    00000000000000000554657874310008476565207768697a0000000000000000000000}}}
  2853.    {\fldrslt Default Result}}{\*\bkmkend Text1}
  2854.  
  2855. Note that the \datafield destination requires the \* prefix.
  2856.  
  2857.  
  2858. Index Entries
  2859.  
  2860. The \ xe control word introduces an index entry. Index entries in RTF are
  2861. destinations. An index entry has the following syntax:
  2862.  
  2863. |<idx>        |'{' \ xe (\xef? & \ bxe? & \ ixe?) <char>+ (<txe> | <rxe>)?  |
  2864. |             |'}'                                                          |
  2865. |<txe>        |'{' \ txe <char>+ '}'                                        |
  2866. |<rxe>        |'{' \ rxe #PCDATA '}'                                        |
  2867.  
  2868.  
  2869. If the text of the index entry is not formatted as hidden text with the \ v
  2870. control word, the text is put into the document as well as into the index.
  2871. For more information on the \ v control word, see "Character Formatting
  2872. Properties" on page 32 of this Application Note. Similarly, the text of the
  2873. \ txe subdestination, described later in this section, becomes part of the
  2874. document if it is not formatted as hidden text.
  2875.  
  2876. The following control words may also be used.
  2877.  
  2878. |Control word |Meaning                                                      |
  2879. |\ xefN       |Allows multiple indexes within the same document. N is an    |
  2880. |             |integer that corresponds to the ASCII value of a letter      |
  2881. |             |between A and Z.                                             |
  2882. |\ bxe        |Formats the page number or cross-reference in bold.          |
  2883. |\ ixe        |Formats the page number or cross-reference in italic.        |
  2884. |\ txe Text   |Text argument to be used instead of a page number. This is a |
  2885. |             |destination control word.                                    |
  2886. |\ rxe        |Text argument is a bookmark for the range of page numbers.   |
  2887. |BookmarkName |This is a destination control word.                          |
  2888.  
  2889.  
  2890. Table of Contents Entries
  2891.  
  2892. The \ tc control word introduces a table of contents entry, which can be
  2893. used to build the actual table of contents. The \tcn control word marks a
  2894. table of contents entry that will not have a page number associated with
  2895. it; this is used in place of \ tc for such entries. Table of contents
  2896. entries are destinations, and they have the following syntax:
  2897.  
  2898. |<toc>        |'{' \ tc | \tcn ( \ tcf? & \ tcl?) <char>+ '}'               |
  2899.  
  2900.  
  2901. As with index entries, text that is not formatted as hidden with the \ v
  2902. character-formatting control word is put into the document. The following
  2903. control words can also be used in this destination.
  2904.  
  2905. |Control word |Meaning                                                      |
  2906. |\ tcfN       |Type of table being compiled; N is mapped by existing        |
  2907. |             |Microsoft software to a letter between A and Z (the default  |
  2908. |             |is 67, which maps to C, used for tables of contents).        |
  2909. |\ tclN       |Level number (the default is 1).                             |
  2910.  
  2911.  
  2912. Bidirectional Language Support
  2913.  
  2914. RTF supports bidirectional writing orders for languages such as Arabic. The
  2915. controls are described below (as well as in the appropriate sections
  2916. throughout this Application Note). Also refer to the associated character
  2917. properties defined in â€œAssociated Character Properties” on page 35 of this
  2918. Application Note.
  2919.  
  2920. All the control words relating to bidirectional language support are
  2921. repeated here for convenience.
  2922.  
  2923. |Control word |Meaning                                                      |
  2924. |\ rtlch      |The character data following this control word will be       |
  2925. |             |treated as a right-to-left run.                              |
  2926. |\ ltrch      |The character data following this control word will be       |
  2927. |             |treated as a left-to-right run (the default).                |
  2928. |\ rtlmark    |The following characters should be displayed from right to   |
  2929. |             |left.                                                        |
  2930. |\ ltrmark    |The following characters should be displayed from left to    |
  2931. |             |right.                                                       |
  2932. |\ rtlpar     |Text in this paragraph will be displayed with right-to-left  |
  2933. |             |precedence                                                   |
  2934. |\ ltrpar     |Text in this paragraph will be displayed with left-to-right  |
  2935. |             |precedence. This is the default.                             |
  2936. |\ rtlrow     |Cells in this table row will have right-to-left precedence.  |
  2937. |\ ltrrow     |Cells in this table row will have left-to-right precedence.  |
  2938. |             |This is the default.                                         |
  2939. |\ rtlsect    |This section will thread columns from right to left.         |
  2940. |\ ltrsect    |This section will thread columns from left to right. This is |
  2941. |             |the default.                                                 |
  2942. |\ rtldoc     |Text in this document will be displayed from right to left   |
  2943. |             |unless overridden by a more specific control.                |
  2944. |\ ltrdoc     |Text in this document will be displayed from left to right   |
  2945. |             |unless overridden by a more specific control. This is the    |
  2946. |             |default.                                                     |
  2947. |\ zwj        |Zero-width joiner. This is used for ligating characters.     |
  2948. |\ zwnj       |Zero-width nonjoiner. This is used for unligating characters.|
  2949.  
  2950. Appendix A: Sample RTF Reader Application
  2951.  
  2952. The GC0165 disk included with this Application Note contains the sample RTF
  2953. reader program RTFREADR.EXE, which will help you create an RTF reader for
  2954. your own application when used in conjunction with the Microsoft Rich Text
  2955. Format Specification and the information below.
  2956.  
  2957.    Note: The sample RTF reader is not a for-sale product, and Microsoft
  2958.    does not provide technical or any other type of support for the sample
  2959.    RTF reader code or the RTF specification.
  2960.  
  2961. If this shipment has arrived in unsatisfactory condition, please call
  2962. Microsoft Product Support Services (PSS). In the United States, call (206)
  2963. 462-WORD (9673) between 6:00 a.m. and 6:00 p.m. Pacific time. Outside the
  2964. United States, contact the Microsoft subsidiary for your area. To locate
  2965. your subsidiary, call Microsoft International Customer Service at (206) 936-
  2966. 8661.
  2967.  
  2968.  
  2969. How to Write an RTF Reader
  2970.  
  2971. There are three basic things that an RTF reader must do:
  2972.  
  2973. 1. Separate text from RTF controls
  2974.  
  2975. 2. Parse an RTF control
  2976.  
  2977. 3. Dispatch an RTF control
  2978.  
  2979. Separating text from RTF controls is relatively simple, as all RTF controls
  2980. begin with a backslash. Therefore, any incoming character that is not a
  2981. backslash is text and will be handled as text. (Of course, what one does
  2982. with that text may be relatively complicated.)
  2983.  
  2984. Parsing an RTF control is also relatively simple. An RTF control is either
  2985. (a) a sequence of alphabetic characters followed by an optional numeric
  2986. parameter, or (b) a single non-alphanumeric character.
  2987.  
  2988. Dispatching an RTF control, on the other hand, is relatively complicated. A
  2989. recursive-descent parser tends to be overly strict because RTF is
  2990. intentionally vague about the order of various properties relative to one
  2991. another. However, whatever method you use to dispatch an RTF control, your
  2992. reader should do the following:
  2993.  
  2994. • Ignore keywords you don’t understand.
  2995.  
  2996.   Many readers crash when they come across an unknown RTF control. Because
  2997.   Microsoft is continually adding new RTF controls, this limits an RTF
  2998.   reader to working with the RTF from one particular product (usually some
  2999.   version of Word for Windows).
  3000.  
  3001. • Always understand \*.
  3002.  
  3003.   One of the most important things an RTF reader can do is to understand
  3004.   the \* control. This control introduces a destination that is not part of
  3005.   the document. It tells the RTF reader that if the reader does not
  3006.   understand the next control word, then it should skip the entire
  3007.   enclosing group. If your reader follows this rule and the one above, your
  3008.   reader will be able to cope with any future change to RTF short of a
  3009.   complete rewrite.
  3010.  
  3011. • Remember that binary data can occur when you’re skipping RTF.
  3012.  
  3013.   A simple way to skip a group in RTF is to keep a running count of the
  3014.   opening curly braces that the reader has encountered in the RTF stream.
  3015.   When the reader sees an opening curly brace, it increments the count;
  3016.   when the reader sees a closing curly brace, it decrements the count. When
  3017.   the count becomes negative, the end of the group has been found.
  3018.   Unfortunately, this doesn’t work when the RTF file contains a \bin
  3019.   control; the reader must explicitly check each control word found to see
  3020.   if it’s a \bin control, and—if a \bin control is found—skip that many
  3021.   bytes before resuming its scanning for curly braces.
  3022.  
  3023.  
  3024. A Sample RTF Reader Implementation
  3025.  
  3026. The Microsoft Word Processing Conversions group uses a table-driven
  3027. approach to reading RTF. This approach allows the most flexibility in
  3028. reading RTF, with the corresponding problem that it’s difficult to detect
  3029. incorrect RTF. An RTF reader that is based on this approach is presented
  3030. below. This reader works exactly as described in the RTF specification and
  3031. uses the principles of operation described in the RTF specification. This
  3032. reader is designed to be simple to understand but is not intended to be
  3033. very efficient. This RTF reader also implements the three design principles
  3034. listed in the previous section.
  3035.  
  3036. The RTF reader consists of four files:
  3037.  
  3038. • RTFDECL.H, which contains the prototypes for all the functions in the RTF
  3039.   reader
  3040.  
  3041. • RTFTYPE.H, which contains the types used in the RTF reader
  3042.  
  3043. • RTFREADR.C, which contains the main program, the main loop of the RTF
  3044.   reader, and the RTF control parser
  3045.  
  3046. • RTFACTN.C, which contains the dispatch routines for the RTF reader
  3047.  
  3048.  
  3049. RTFDECL.H and RTFREADR.C
  3050.  
  3051. RTFDECL.H is straightforward and requires little explanation.
  3052.  
  3053. RTFREADR.C is also reasonably straightforward; the function ecRtfParse
  3054. separates text from RTF controls and handles text, and the function
  3055. ecParseRtfKeyword parses an RTF control and also collects any parameter
  3056. that follows the RTF control.
  3057.  
  3058.  
  3059. RTFTYPE.H
  3060.  
  3061. RTFTYPE.H begins by declaring a sample set of character, paragraph,
  3062. section, and document properties. These structures are present to
  3063. demonstrate how the dispatch routines can modify any particular property
  3064. and are not actually used to format text.
  3065.  
  3066. For example, the following enumeration describes which destination text
  3067. should be routed to:
  3068.  
  3069.    typedef enum { rdsNorm, rdsSkip } RDS;
  3070.  
  3071. Because this is just a sample RTF reader, there are only two destinations;
  3072. a more complicated reader would add an entry to this enumeration for each
  3073. destination supported (for example—headers, footnotes, endnotes,
  3074. annotations, bookmarks, and pictures).
  3075.  
  3076. The following enumeration describes the internal state of the RTF parser:
  3077.  
  3078.    typedef enum { risNorm, risBin, risHex } RIS;
  3079.  
  3080. This is entirely separate from the state of the dispatch routines and the
  3081. destination state; other RTF readers may not necessarily have anything
  3082. similar to this.
  3083.  
  3084. The following structure encapsulates the state that must be saved at a
  3085. group start and restored at a group end:
  3086.  
  3087.    typedef struct save
  3088.    {
  3089.    struct save *pNext;
  3090.    CHP chp;
  3091.    PAP pap;
  3092.    SEP sep;
  3093.    DOP dop;
  3094.    RDS rds;
  3095.    RIS ris;
  3096.    } SAVE;
  3097.  
  3098. The following enumeration describes a set of classes for RTF controls:
  3099.  
  3100.    typedef enum {kwdChar, kwdDest, kwdProp, kwdSpec} KWD;
  3101.  
  3102. Use kwdChar for controls that represent special characters (such as \-, \{,
  3103. or \}).
  3104.  
  3105. Use kwdDest for controls that introduce RTF destinations.
  3106.  
  3107. Use kwdProp for controls that modify some sort of property.
  3108.  
  3109. Use kwdSpec for controls that need to run some specialized code.
  3110.  
  3111. The following enumeration defines the number of PROP structures (described
  3112. below) that will be used. There will typically be an iprop for every field
  3113. in the character, paragraph, section, and document properties.
  3114.  
  3115.    typedef enum {ipropBold, ipropItalic, ipropUnderline, ipropLeftInd,
  3116.    ipropRightInd, ipropFirstInd, ipropCols, ipropPgnX, ipropPgnY,
  3117.    ipropXaPage, ipropYaPage, ipropXaLeft, ipropXaRight,
  3118.    ipropYaTop, ipropYaBottom, ipropPgnStart, ipropSbk,
  3119.    ipropPgnFormat, ipropFacingp, ipropLandscape, ipropJust,
  3120.    ipropPard, ipropPlain,
  3121.    ipropMax} IPROP;
  3122.  
  3123. The following structure is a very compact way to describe how to locate the
  3124. address of a particular value in one of the property structures:
  3125.  
  3126.    typedef enum {actnSpec, actnByte, actnWord} ACTN;
  3127.    typedef enum {propChp, propPap, propSep, propDop} PROPTYPE;
  3128.  
  3129.  
  3130.    typedef struct propmod
  3131.    {
  3132.    ACTN actn;
  3133.    PROPTYPE prop;
  3134.    int offset;
  3135.    } PROP;
  3136.  
  3137. The actn field describes the width of the value being described: if the
  3138. value is a byte, then actn is actnByte; if the value is a word, then actn
  3139. is actnWord; if the value is neither a byte nor a word, then you can use
  3140. actnSpec to indicate that some C code needs to be run to set the value. The
  3141. prop field indicates which property structure is being described; propChp
  3142. indicates that the value is located within the CHP structure; propPap
  3143. indicates that the value is located within the PAP structure, and so on.
  3144. Finally, the offset field contains the offset of the value from the start
  3145. of the structure. The offsetof() macro is usually used to initialize this
  3146. field.
  3147.  
  3148. The following structure describes how to parse a particular RTF control:
  3149.  
  3150.    typedef enum {ipfnBin, ipfnHex, ipfnSkipDest } IPFN;
  3151.    typedef enum {idestPict, idestSkip } IDEST;
  3152.  
  3153.  
  3154.    typedef struct symbol
  3155.    {
  3156.    char *szKeyword;
  3157.    int dflt;
  3158.    bool fPassDflt;
  3159.    KWD kwd;
  3160.    int idx;
  3161.    } SYM;
  3162.  
  3163. szKeyword points to the RTF control being described; kwd describes the
  3164. class of the particular RTF control (described above); dflt is the default
  3165. value for this control, and fPassDflt should be nonzero if the value in
  3166. dflt should be passed to the dispatch routine. (fPassDflt is only nonzero
  3167. for keywords that normally set a particular value. For example, the various
  3168. section break controls typically have nonzero fPassDflt controls, but
  3169. controls that take parameters should not.)
  3170.  
  3171. Idx is a generalized index; its use depends on the kwd being used for this
  3172. control.
  3173.  
  3174. • If kwd is kwdChar, then idx is the character that should be output.
  3175.  
  3176. • If kwd is kwdDest, then idx is the idest for the new destination.
  3177.  
  3178. • If kwd is kwdProp, then idx is the iprop for the appropriate property.
  3179.  
  3180. • If kwd is kwdSpec, then idx is an ipfn for the appropriate function.
  3181.  
  3182. With this structure, it is very simple to dispatch an RTF keyword. Once the
  3183. reader isolates the RTF keyword and its (possibly associated) value, the
  3184. reader then searches an array of SYM structures to find the RTF keyword. If
  3185. the keyword is not found, the reader ignores it, unless the previous
  3186. control was \*, in which case the reader must scan past an entire group.
  3187.  
  3188. If the keyword is found, the reader then uses the kwd value from the SYM
  3189. structure to determine what to do. This is, in fact, exactly what the
  3190. function ecTranslateKeyword in the file RTFACTN.C does.
  3191.  
  3192.  
  3193. The RTFACTN.C File
  3194.  
  3195. RTFACTN.C contains the tables describing the properties and keywords, and
  3196. the routines to evaluate properties (ecApplyPropChange) and to dispatch
  3197. keywords (ecTranslateKeyword).
  3198.  
  3199. The tables are the keys to understanding the RTF dispatch routines. The
  3200. following are some sample entries from both tables, along with a brief
  3201. explanation of each entry.
  3202.  
  3203. The Property Table. This table must have an entry for every iprop.
  3204.  
  3205.    actnByte,   propChp,    offsetof(CHP, fBold),       // ipropBold
  3206.  
  3207.        This property says that the ipropBold property is a byte parameter
  3208.        bound to chp.fBold.
  3209.  
  3210.    actnWord,   propPap,    offsetof(PAP, xaRight),     // ipropRightInd
  3211.  
  3212.        This property says that ipropRightInd is a word parameter bound to
  3213.        pap.xaRight.
  3214.  
  3215.    actnWord,   propSep,    offsetof(SEP, cCols),       // ipropCols
  3216.  
  3217.        This property says that ipropCols is a word parameter bound to
  3218.        sep.cCols.
  3219.  
  3220.    actnSpec,   propChp,    0,                          // ipropPlain
  3221.  
  3222.        This property says that ipropPlain is a special parameter. Instead of
  3223.        directly evaluating it, ecApplyPropChange will run some custom C code
  3224.        to apply a property change.
  3225.  
  3226. The Keyword Table.
  3227.  
  3228.    "b",        1,      fFalse,     kwdProp,    ipropBold,
  3229.  
  3230.        This structure says that the control \b sets the ipropBold property.
  3231.        Because fPassDflt is false, the reader only uses the default value if
  3232.        the control does not have a parameter. If no parameter is provided,
  3233.        the reader uses a value of 1.
  3234.  
  3235.    "sbknone",  sbkNon, fTrue,      kwdProp,    ipropSbk,
  3236.  
  3237.        This entry says that the control \sbknone sets the ipropSbk property.
  3238.        Since fPassDflt is true, the reader always uses the default value of
  3239.        sbkNon, even if the control has a parameter.
  3240.  
  3241.    "par",      0,      fFalse,     kwdChar,    0x0a,
  3242.  
  3243.        This entry says that the control \par is equivalent to a 0x0a
  3244.        (linefeed) character.
  3245.  
  3246.    "tab",      0,      fFalse,     kwdChar,    0x09,
  3247.  
  3248.        This entry says that the control \tab is equivalent to a 0x09 (tab)
  3249.        character.
  3250.  
  3251.    "bin",      0,      fFalse,     kwdSpec,    ipfnBin,
  3252.  
  3253.        This entry says that the control \bin should run some C code. The
  3254.        particular piece of C code can be located by the ipfnBin parameter.
  3255.  
  3256.    "fonttbl",  0,      fFalse,     kwdDest,    idestSkip,
  3257.  
  3258.        This entry says that the control \fonttbl should change to the
  3259.        destination idestSkip.
  3260.  
  3261.  
  3262. Notes on Implementing Other RTF Features
  3263.  
  3264. The table-driven approach to dispatching RTF controls used by the sample
  3265. converter does not implement any syntax checking. For most controls, this
  3266. is not a problem; a control simply modifies the appropriate property.
  3267. However, some controls, such as those for tabs and borders, are dependent
  3268. on other control words either before or after the current control word.
  3269.  
  3270. There are some standard techniques for handling these features:
  3271.  
  3272.  
  3273. Tabs and Other Control Sequences Terminating in a Fixed Control
  3274.  
  3275. The best way to implement these types of control sequences is to have a
  3276. global structure that represents the current state of the tab descriptor
  3277. (or other entity). As the modifiers come in, they modify the various fields
  3278. of the global structure; when the fixed control at the end of the sequence
  3279. is dispatched, it adds the entire descriptor and reinitializes the global
  3280. variable.
  3281.  
  3282.  
  3283. Borders and Other Control Sequences Beginning with a Fixed Control
  3284.  
  3285. The best way to implement these types of control sequences is to have a
  3286. global pointer that is initialized when the fixed control is dispatched;
  3287. the controls that modify the fixed control then modify fields pointed to by
  3288. the control.
  3289.  
  3290.  
  3291. Other Problem Areas in RTF
  3292.  
  3293.  
  3294. Style Sheets
  3295.  
  3296. Style sheets can be handled as destinations; however, styles have default
  3297. values, just as every other control does; RTF readers should be sure to
  3298. handle a missing style control as the default style value (that is, 0).
  3299.  
  3300.  
  3301. Property Changes
  3302.  
  3303. Some RTF readers use various bits of RTF syntax to mark property changes.
  3304. In particular, they assume that property changes will occur only after a
  3305. group start, which is not correct. Because there is a variety of ways to
  3306. represent identical property changes in RTF, RTF readers should look at the
  3307. changes in the properties and not at any particular way of representing a
  3308. property change. In particular, properties can be changed explicitly with a
  3309. control word or implicitly at the end of a group. For example, these three
  3310. sequences of RTF have exactly the same semantics, and should be translated
  3311. identically:
  3312.  
  3313.     â€¢ {\b bold \i Bold Italic \i0 Bold again}
  3314.     â€¢ {\b bold {\i Bold Italic }Bold again}
  3315.     â€¢ {\b bold \i Bold Italic \plain\b Bold again}
  3316.  
  3317. Fields
  3318.  
  3319. All versions of Microsoft Word for Windows and version 6.0 of Microsoft
  3320. Word for the Macintosh have fields. If you’re writing an RTF reader and
  3321. expect to do anything with fields, keep the following notes in mind:
  3322.  
  3323. • Field instructions may have arbitrary amounts of character formatting and
  3324.   arbitrarily nested groups. While the groups will be properly nested
  3325.   within the field instructions, you may be inside an arbitrary number of
  3326.   groups by the time you know which field you working with. If you then
  3327.   expect to be able to skip to the end of the field instructions, you’ll
  3328.   have to know how many groups have started so that you can skip to the end
  3329.   properly.
  3330.  
  3331. • Some fields, the INCLUDE field in particular, can have section breaks in
  3332.   the field results. If this occurs, then the text after the end of the
  3333.   field does not have the same section properties as the text at the start
  3334.   of the field; the section properties must not be restored when the field
  3335.   results contain section breaks.
  3336.  
  3337.  
  3338. Tables
  3339.  
  3340. Tables are probably the trickiest part of RTF to read and write correctly.
  3341. Because of the way Microsoft word processors implement tables, and the
  3342. table-driven approach of many Microsoft RTF readers, it is very easy to
  3343. write tables in RTF that will crash Microsoft word processors when you try
  3344. to read the RTF. Here are some guidelines to reduce problems with tables in
  3345. RTF:
  3346.  
  3347. • Place the entire table definition before any paragraph properties,
  3348.   including \pard.
  3349.  
  3350. • Make sure the number of cells in the RTF matches the number of cell
  3351.   definitions.
  3352.  
  3353. • Some controls must be the same in all paragraphs in a row. In particular,
  3354.   all paragraphs in a row must have the same positioning controls, and all
  3355.   paragraphs in a row must have \intbl specified.
  3356.  
  3357. • Do not use the \sbys control inside a table. \sbys is a holdover from
  3358.   Word for MS-DOS and early versions of Word for the Macintosh. Word for
  3359.   Windows and current versions of Word for the Macintosh translate \sbys as
  3360.   a table. Because Word for Windows and Word for the Macintosh do not
  3361.   support nested tables, these products will probably crash if you specify
  3362.   \sbys in a table.
  3363.  
  3364. • Cell definitions starting before the left margin of the paper begins
  3365.   (that is, the parameter plus the left margin is negative) are always in
  3366.   error.
  3367.  
  3368. • Even though nested tables are not explicitly defined in RTF, and Word for
  3369.   Windows and Word for the Macintosh do not support nested tables, you must
  3370.   still save table properties when changing destinations because tables can
  3371.   be nested inside other destinations—that is, you can have a table that
  3372.   contains a footnote or an annotation, and the footnote or annotation can
  3373.   contain another table.
  3374.  
  3375.  
  3376.  
  3377. Appendix A-1: Listings
  3378.  
  3379.  
  3380. RTFDECL.H
  3381.  
  3382.    // RTF parser declarations
  3383.  
  3384.  
  3385.    int ecRtfParse(FILE *fp);
  3386.    int ecPushRtfState(void);
  3387.    int ecPopRtfState(void);
  3388.    int ecParseRtfKeyword(FILE *fp);
  3389.    int ecParseChar(int c);
  3390.    int ecTranslateKeyword(char *szKeyword, int param, bool fParam);
  3391.    int ecPrintChar(int ch);
  3392.    int ecEndGroupAction(RDS rds);
  3393.    int ecApplyPropChange(IPROP iprop, int val);
  3394.    int ecChangeDest(IDEST idest);
  3395.    int ecParseSpecialKeyword(IPFN ipfn);
  3396.    int ecParseSpecialProperty(IPROP iprop, int val);
  3397.    int ecParseHexByte(void);
  3398.  
  3399.  
  3400.    // RTF variable declarations
  3401.  
  3402.  
  3403.    extern int cGroup;
  3404.    extern RDS rds;
  3405.    extern RIS ris;
  3406.  
  3407.  
  3408.    extern CHP chp;
  3409.    extern PAP pap;
  3410.    extern SEP sep;
  3411.    extern DOP dop;
  3412.  
  3413.  
  3414.    extern SAVE *psave;
  3415.    extern long cbBin;
  3416.    extern long lParam;
  3417.    extern bool fSkipDestIfUnk;
  3418.    extern FILE *fpIn;
  3419.  
  3420.  
  3421.    // RTF parser error codes
  3422.  
  3423.  
  3424.    #define ecOK 0                      // Everything's fine!
  3425.    #define ecStackUnderflow    1       // Unmatched '}'
  3426.    #define ecStackOverflow     2       // Too many '{' -- memory exhausted
  3427.    #define ecUnmatchedBrace    3       // RTF ended during an open group.
  3428.    #define ecInvalidHex        4       // invalid hex character found in
  3429.    data
  3430.    #define ecBadTable          5       // RTF table (sym or prop) invalid
  3431.    #define ecAssertion         6       // Assertion failure
  3432.    #define ecEndOfFile         7       // End of file reached while reading
  3433.    RTF
  3434.  
  3435. RTFTYPE.H
  3436.  
  3437.    typedef char bool;
  3438.    #define fTrue 1
  3439.    #define fFalse 0
  3440.  
  3441.  
  3442.    typedef struct char_prop
  3443.    {
  3444.        char fBold;
  3445.        char fUnderline;
  3446.        char fItalic;
  3447.    } CHP;                  // CHaracter Properties
  3448.  
  3449.  
  3450.    typedef enum {justL, justR, justC, justF } JUST;
  3451.    typedef struct para_prop
  3452.    {
  3453.        int xaLeft;                 // left indent in twips
  3454.        int xaRight;                // right indent in twips
  3455.        int xaFirst;                // first line indent in twips
  3456.        JUST just;                  // justification
  3457.    } PAP;                  // PAragraph Properties
  3458.  
  3459.  
  3460.    typedef enum {sbkNon, sbkCol, sbkEvn, sbkOdd, sbkPg} SBK;
  3461.    typedef enum {pgDec, pgURom, pgLRom, pgULtr, pgLLtr} PGN;
  3462.    typedef struct sect_prop
  3463.    {
  3464.        int cCols;                  // number of columns
  3465.        SBK sbk;                    // section break type
  3466.        int xaPgn;                  // x position of page number in twips
  3467.        int yaPgn;                  // y position of page number in twips
  3468.        PGN pgnFormat;              // how the page number is formatted
  3469.    } SEP;                  // SEction Properties
  3470.  
  3471.  
  3472.    typedef struct doc_prop
  3473.    {
  3474.        int xaPage;                 // page width in twips
  3475.        int yaPage;                 // page height in twips
  3476.        int xaLeft;                 // left margin in twips
  3477.        int yaTop;                  // top margin in twips
  3478.        int xaRight;                // right margin in twips
  3479.        int yaBottom;               // bottom margin in twips
  3480.        int pgnStart;               // starting page number in twips
  3481.        char fFacingp;              // facing pages enabled?
  3482.        char fLandscape;            // landscape or portrait??
  3483.    } DOP;                  // DOcument Properties
  3484.  
  3485.  
  3486.    typedef enum { rdsNorm, rdsSkip } RDS;              // Rtf Destination
  3487.    State
  3488.    typedef enum { risNorm, risBin, risHex } RIS;       // Rtf Internal
  3489.    State
  3490.  
  3491.  
  3492.    typedef struct save             // property save structure
  3493.    {
  3494.        struct save *pNext;         // next save
  3495.        CHP chp;
  3496.        PAP pap;
  3497.        SEP sep;
  3498.        DOP dop;
  3499.        RDS rds;
  3500.        RIS ris;
  3501.    } SAVE;
  3502.  
  3503.  
  3504.    // What types of properties are there?
  3505.    typedef enum {ipropBold, ipropItalic, ipropUnderline, ipropLeftInd,
  3506.                  ipropRightInd, ipropFirstInd, ipropCols, ipropPgnX,
  3507.                  ipropPgnY, ipropXaPage, ipropYaPage, ipropXaLeft,
  3508.                  ipropXaRight, ipropYaTop, ipropYaBottom, ipropPgnStart,
  3509.                  ipropSbk, ipropPgnFormat, ipropFacingp, ipropLandscape,
  3510.                  ipropJust, ipropPard, ipropPlain, ipropSectd,
  3511.                  ipropMax } IPROP;
  3512.  
  3513.  
  3514.    typedef enum {actnSpec, actnByte, actnWord} ACTN;
  3515.    typedef enum {propChp, propPap, propSep, propDop} PROPTYPE;
  3516.  
  3517.  
  3518.    typedef struct propmod
  3519.    {
  3520.        ACTN actn;              // size of value
  3521.        PROPTYPE prop;          // structure containing value
  3522.        int  offset;            // offset of value from base of structure
  3523.    } PROP;
  3524.  
  3525.  
  3526.    typedef enum {ipfnBin, ipfnHex, ipfnSkipDest } IPFN;
  3527.    typedef enum {idestPict, idestSkip } IDEST;
  3528.    typedef enum {kwdChar, kwdDest, kwdProp, kwdSpec} KWD;
  3529.  
  3530.  
  3531.    typedef struct symbol
  3532.    {
  3533.        char *szKeyword;        // RTF keyword
  3534.        int  dflt;              // default value to use
  3535.        bool fPassDflt;         // true to use default value from this table
  3536.        KWD  kwd;               // base action to take
  3537.        int  idx;               // index into property table if kwd ==
  3538.    kwdProp
  3539.                                // index into destination table if kwd ==
  3540.    kwdDest
  3541.                                // character to print if kwd == kwdChar
  3542.    } SYM;
  3543.  
  3544. RTFREADR.C
  3545.  
  3546.    #include <stdio.h>
  3547.    #include <stdlib.h>
  3548.    #include <ctype.h>
  3549.    #include "rtftype.h"
  3550.    #include "rtfdecl.h"
  3551.  
  3552.  
  3553.    int cGroup;
  3554.    bool fSkipDestIfUnk;
  3555.    long cbBin;
  3556.    long lParam;
  3557.  
  3558.  
  3559.    RDS rds;
  3560.    RIS ris;
  3561.  
  3562.  
  3563.    CHP chp;
  3564.    PAP pap;
  3565.    SEP sep;
  3566.    DOP dop;
  3567.  
  3568.  
  3569.    SAVE *psave;
  3570.    FILE *fpIn;
  3571.  
  3572.  
  3573.    //
  3574.    // %%Function: main
  3575.    //
  3576.    // Main loop. Initialize and parse RTF.
  3577.    //
  3578.    main(int argc, char *argv[])
  3579.    {
  3580.        FILE *fp;
  3581.        int ec;
  3582.  
  3583.  
  3584.        fp = fpIn = fopen("test.rtf", "r");
  3585.        if (!fp)
  3586.        {
  3587.            printf ("Can't open test file!\n");
  3588.            return 1;
  3589.        }
  3590.        if ((ec = ecRtfParse(fp)) != ecOK)
  3591.            printf("error %d parsing rtf\n", ec);
  3592.        else
  3593.            printf("Parsed RTF file OK\n");
  3594.        fclose(fp);
  3595.        return 0;
  3596.    }
  3597.  
  3598.  
  3599.    //
  3600.    // %%Function: ecRtfParse
  3601.    //
  3602.    // Step 1:
  3603.    // Isolate RTF keywords and send them to ecParseRtfKeyword;
  3604.    // Push and pop state at the start and end of RTF groups;
  3605.    // Send text to ecParseChar for further processing.
  3606.    //
  3607.  
  3608.  
  3609.    int
  3610.    ecRtfParse(FILE *fp)
  3611.    {
  3612.        int ch;
  3613.        int ec;
  3614.        int cNibble = 2;
  3615.        int b = 0;
  3616.        while ((ch = getc(fp)) != EOF)
  3617.        {
  3618.            if (cGroup < 0)
  3619.                return ecStackUnderflow;
  3620.            if (ris == risBin)                      // if we're parsing
  3621.    binary data, handle it directly
  3622.            {
  3623.                if ((ec = ecParseChar(ch)) != ecOK)
  3624.                    return ec;
  3625.            }
  3626.            else
  3627.            {
  3628.                switch (ch)
  3629.                {
  3630.                case '{':
  3631.                    if ((ec = ecPushRtfState()) != ecOK)
  3632.                        return ec;
  3633.                    break;
  3634.                case '}':
  3635.                    if ((ec = ecPopRtfState()) != ecOK)
  3636.                        return ec;
  3637.                    break;
  3638.                case '\\':
  3639.                    if ((ec = ecParseRtfKeyword(fp)) != ecOK)
  3640.                        return ec;
  3641.                    break;
  3642.                case 0x0d:
  3643.                case 0x0a:          // cr and lf are noise characters...
  3644.                    break;
  3645.                default:
  3646.                    if (ris == risNorm)
  3647.                    {
  3648.                        if ((ec = ecParseChar(ch)) != ecOK)
  3649.                            return ec;
  3650.                    }
  3651.                    else
  3652.                    {               // parsing hex data
  3653.                        if (ris != risHex)
  3654.                            return ecAssertion;
  3655.                        b = b << 4;
  3656.                        if (isdigit(ch))
  3657.                            b += (char) ch - '0';
  3658.                        else
  3659.                        {
  3660.                            if (islower(ch))
  3661.                            {
  3662.                                if (ch < 'a' || ch > 'f')
  3663.                                    return ecInvalidHex;
  3664.                                b += (char) ch - 'a';
  3665.                            }
  3666.                            else
  3667.                            {
  3668.                                if (ch < 'A' || ch > 'F')
  3669.                                    return ecInvalidHex;
  3670.                                b += (char) ch - 'A';
  3671.                            }
  3672.                        }
  3673.                        cNibble--;
  3674.                        if (!cNibble)
  3675.                        {
  3676.                            if ((ec = ecParseChar(ch)) != ecOK)
  3677.                                return ec;
  3678.                            cNibble = 2;
  3679.                            b = 0;
  3680.    ris = risNorm;
  3681.                        }
  3682.                    }                   // end else (ris != risNorm)
  3683.                    break;
  3684.                }       // switch
  3685.            }           // else (ris != risBin)
  3686.        }               // while
  3687.        if (cGroup < 0)
  3688.            return ecStackUnderflow;
  3689.        if (cGroup > 0)
  3690.            return ecUnmatchedBrace;
  3691.        return ecOK;
  3692.    }
  3693.  
  3694.  
  3695.    //
  3696.    // %%Function: ecPushRtfState
  3697.    //
  3698.    // Save relevant info on a linked list of SAVE structures.
  3699.    //
  3700.  
  3701.  
  3702.    int
  3703.    ecPushRtfState(void)
  3704.    {
  3705.        SAVE *psaveNew = malloc(sizeof(SAVE));
  3706.        if (!psaveNew)
  3707.            return ecStackOverflow;
  3708.  
  3709.  
  3710.        psaveNew -> pNext = psave;
  3711.        psaveNew -> chp = chp;
  3712.        psaveNew -> pap = pap;
  3713.        psaveNew -> sep = sep;
  3714.        psaveNew -> dop = dop;
  3715.        psaveNew -> rds = rds;
  3716.        psaveNew -> ris = ris;
  3717.        ris = risNorm;
  3718.        psave = psaveNew;
  3719.        cGroup++;
  3720.        return ecOK;
  3721.    }
  3722.  
  3723.  
  3724.    //
  3725.    // %%Function: ecPopRtfState
  3726.    //
  3727.    // If we're ending a destination (that is, the destination is changing),
  3728.    // call ecEndGroupAction.
  3729.    // Always restore relevant info from the top of the SAVE list.
  3730.    //
  3731.  
  3732.  
  3733.    int
  3734.    ecPopRtfState(void)
  3735.    {
  3736.        SAVE *psaveOld;
  3737.        int ec;
  3738.  
  3739.  
  3740.        if (!psave)
  3741.            return ecStackUnderflow;
  3742.  
  3743.  
  3744.        if (rds != psave->rds)
  3745.        {
  3746.            if ((ec = ecEndGroupAction(rds)) != ecOK)
  3747.                return ec;
  3748.        }
  3749.        chp = psave->chp;
  3750.        pap = psave->pap;
  3751.        sep = psave->sep;
  3752.        dop = psave->dop;
  3753.        rds = psave->rds;
  3754.        ris = psave->ris;
  3755.  
  3756.  
  3757.        psaveOld = psave;
  3758.        psave = psave->pNext;
  3759.        cGroup--;
  3760.        free(psaveOld);
  3761.        return ecOK;
  3762.    }
  3763.  
  3764.  
  3765.    //
  3766.    // %%Function: ecParseRtfKeyword
  3767.    //
  3768.    // Step 2:
  3769.    // get a control word (and its associated value) and
  3770.    // call ecTranslateKeyword to dispatch the control.
  3771.    //
  3772.  
  3773.  
  3774.    int
  3775.    ecParseRtfKeyword(FILE *fp)
  3776.    {
  3777.        int ch;
  3778.        char fParam = fFalse;
  3779.        char fNeg = fFalse;
  3780.        int param = 0;
  3781.        char *pch;
  3782.        char szKeyword[30];
  3783.        char szParameter[20];
  3784.  
  3785.  
  3786.        szKeyword[0] = '\0';
  3787.        szParameter[0] = '\0';
  3788.        if ((ch = getc(fp)) == EOF)
  3789.            return ecEndOfFile;
  3790.        if (!isalpha(ch))           // a control symbol; no delimiter.
  3791.        {
  3792.            szKeyword[0] = (char) ch;
  3793.            szKeyword[1] = '\0';
  3794.            return ecTranslateKeyword(szKeyword, 0, fParam);
  3795.        }
  3796.        for (pch = szKeyword; isalpha(ch); ch = getc(fp))
  3797.            *pch++ = (char) ch;
  3798.        *pch = '\0';
  3799.        if (ch == '-')
  3800.        {
  3801.            fNeg  = fTrue;
  3802.            if ((ch = getc(fp)) == EOF)
  3803.                return ecEndOfFile;
  3804.        }
  3805.        if (isdigit(ch))
  3806.        {
  3807.            fParam = fTrue;         // a digit after the control means we
  3808.    have a parameter
  3809.            for (pch = szParameter; isdigit(ch); ch = getc(fp))
  3810.                *pch++ = (char) ch;
  3811.            *pch = '\0';
  3812.            param = atoi(szParameter);
  3813.            if (fNeg)
  3814.                param = -param;
  3815.            lParam = atol(szParameter);
  3816.            if (fNeg)
  3817.                param = -param;
  3818.        }
  3819.        if (ch != ' ')
  3820.            ungetc(ch, fp);
  3821.        return ecTranslateKeyword(szKeyword, param, fParam);
  3822.    }
  3823.  
  3824.  
  3825.    //
  3826.    // %%Function: ecParseChar
  3827.    //
  3828.    // Route the character to the appropriate destination stream.
  3829.    //
  3830.  
  3831.  
  3832.    int
  3833.    ecParseChar(int ch)
  3834.    {
  3835.        if (ris == risBin && --cbBin <= 0)
  3836.            ris = risNorm;
  3837.        switch (rds)
  3838.        {
  3839.        case rdsSkip:
  3840.            // Toss this character.
  3841.            return ecOK;
  3842.        case rdsNorm:
  3843.            // Output a character. Properties are valid at this point.
  3844.            return ecPrintChar(ch);
  3845.        default:
  3846.        // handle other destinations....
  3847.            return ecOK;
  3848.        }
  3849.    }
  3850.  
  3851.  
  3852.    //
  3853.    // %%Function: ecPrintChar
  3854.    //
  3855.    // Send a character to the output file.
  3856.    //
  3857.  
  3858.  
  3859.    int
  3860.    ecPrintChar(int ch)
  3861.    {
  3862.        // unfortunately, we don't do a whole lot here as far as layout
  3863.    goes...
  3864.        putchar(ch);
  3865.        return ecOK;
  3866.    }
  3867.  
  3868. RTFACTN.C
  3869.  
  3870.    #include <stdio.h>
  3871.    #include <string.h>
  3872.    #include <stddef.h>
  3873.    #include <ctype.h>
  3874.    #include "rtftype.h"
  3875.    #include "rtfdecl.h"
  3876.  
  3877.  
  3878.    // RTF parser tables
  3879.  
  3880.  
  3881.    // Property descriptions
  3882.    PROP rgprop [ipropMax] = {
  3883.        actnByte,   propChp,    offsetof(CHP, fBold),       // ipropBold
  3884.        actnByte,   propChp,    offsetof(CHP, fItalic),     // ipropItalic
  3885.        actnByte,   propChp,    offsetof(CHP, fUnderline),  //
  3886.    ipropUnderline
  3887.        actnWord,   propPap,    offsetof(PAP, xaLeft),      // ipropLeftInd
  3888.        actnWord,   propPap,    offsetof(PAP, xaRight),     // ipropRightInd
  3889.        actnWord,   propPap,    offsetof(PAP, xaFirst),     // ipropFirstInd
  3890.        actnWord,   propSep,    offsetof(SEP, cCols),       // ipropCols
  3891.        actnWord,   propSep,    offsetof(SEP, xaPgn),       // ipropPgnX
  3892.        actnWord,   propSep,    offsetof(SEP, yaPgn),       // ipropPgnY
  3893.        actnWord,   propDop,    offsetof(DOP, xaPage),      // ipropXaPage
  3894.        actnWord,   propDop,    offsetof(DOP, yaPage),      // ipropYaPage
  3895.        actnWord,   propDop,    offsetof(DOP, xaLeft),      // ipropXaLeft
  3896.        actnWord,   propDop,    offsetof(DOP, xaRight),     // ipropXaRight
  3897.        actnWord,   propDop,    offsetof(DOP, yaTop),       // ipropYaTop
  3898.        actnWord,   propDop,    offsetof(DOP, yaBottom),    // ipropYaBottom
  3899.        actnWord,   propDop,    offsetof(DOP, pgnStart),    // ipropPgnStart
  3900.        actnByte,   propSep,    offsetof(SEP, sbk),         // ipropSbk
  3901.        actnByte,   propSep,    offsetof(SEP, pgnFormat),   //
  3902.    ipropPgnFormat
  3903.        actnByte,   propDop,    offsetof(DOP, fFacingp),    // ipropFacingp
  3904.        actnByte,   propDop,    offsetof(DOP, fLandscape),  //
  3905.    ipropLandscape
  3906.        actnByte,   propPap,    offsetof(PAP, just),        // ipropJust
  3907.        actnSpec,   propPap,    0,                          // ipropPard
  3908.        actnSpec,   propChp,    0,                          // ipropPlain
  3909.        actnSpec,   propSep,    0,                          // ipropSectd
  3910.    };
  3911.  
  3912.  
  3913.    // Keyword descriptions
  3914.    SYM rgsymRtf[] = {
  3915.    //  keyword     dflt    fPassDflt   kwd         idx
  3916.        "b",        1,      fFalse,     kwdProp,    ipropBold,
  3917.        "u",        1,      fFalse,     kwdProp,    ipropUnderline,
  3918.        "i",        1,      fFalse,     kwdProp,    ipropItalic,
  3919.        "li",       0,      fFalse,     kwdProp,    ipropLeftInd,
  3920.        "ri",       0,      fFalse,     kwdProp,    ipropRightInd,
  3921.        "fi",       0,      fFalse,     kwdProp,    ipropFirstInd,
  3922.        "cols",     1,      fFalse,     kwdProp,    ipropCols,
  3923.        "sbknone",  sbkNon, fTrue,      kwdProp,    ipropSbk,
  3924.        "sbkcol",   sbkCol, fTrue,      kwdProp,    ipropSbk,
  3925.        "sbkeven",  sbkEvn, fTrue,      kwdProp,    ipropSbk,
  3926.        "sbkodd",   sbkOdd, fTrue,      kwdProp,    ipropSbk,
  3927.        "sbkpage",  sbkPg,  fTrue,      kwdProp,    ipropSbk,
  3928.        "pgnx",     0,      fFalse,     kwdProp,    ipropPgnX,
  3929.        "pgny",     0,      fFalse,     kwdProp,    ipropPgnY,
  3930.        "pgndec",   pgDec,  fTrue,      kwdProp,    ipropPgnFormat,
  3931.        "pgnucrm",  pgURom, fTrue,      kwdProp,    ipropPgnFormat,
  3932.        "pgnlcrm",  pgLRom, fTrue,      kwdProp,    ipropPgnFormat,
  3933.        "pgnucltr", pgULtr, fTrue,      kwdProp,    ipropPgnFormat,
  3934.        "pgnlcltr", pgLLtr, fTrue,      kwdProp,    ipropPgnFormat,
  3935.        "qc",       justC,  fTrue,      kwdProp,    ipropJust,
  3936.        "ql",       justL,  fTrue,      kwdProp,    ipropJust,
  3937.        "qr",       justR,  fTrue,      kwdProp,    ipropJust,
  3938.        "qj",       justF,  fTrue,      kwdProp,    ipropJust,
  3939.        "paperw",   12240,  fFalse,     kwdProp,    ipropXaPage,
  3940.        "paperh",   15480,  fFalse,     kwdProp,    ipropYaPage,
  3941.        "margl",    1800,   fFalse,     kwdProp,    ipropXaLeft,
  3942.        "margr",    1800,   fFalse,     kwdProp,    ipropXaRight,
  3943.        "margt",    1440,   fFalse,     kwdProp,    ipropYaTop,
  3944.        "margb",    1440,   fFalse,     kwdProp,    ipropYaBottom,
  3945.        "pgnstart", 1,      fTrue,      kwdProp,    ipropPgnStart,
  3946.        "facingp",  1,      fTrue,      kwdProp,    ipropFacingp,
  3947.        "landscape",1,      fTrue,      kwdProp,    ipropLandscape,
  3948.        "par",      0,      fFalse,     kwdChar,    0x0a,
  3949.        "\0x0a",    0,      fFalse,     kwdChar,    0x0a,
  3950.        "\0x0d",    0,      fFalse,     kwdChar,    0x0a,
  3951.        "tab",      0,      fFalse,     kwdChar,    0x09,
  3952.        "ldblquote",0,      fFalse,     kwdChar,    '"',
  3953.        "rdblquote",0,      fFalse,     kwdChar,    '"',
  3954.        "bin",      0,      fFalse,     kwdSpec,    ipfnBin,
  3955.        "*",        0,      fFalse,     kwdSpec,    ipfnSkipDest,
  3956.        "'",        0,      fFalse,     kwdSpec,    ipfnHex,
  3957.        "author",   0,      fFalse,     kwdDest,    idestSkip,
  3958.        "buptim",   0,      fFalse,     kwdDest,    idestSkip,
  3959.        "colortbl", 0,      fFalse,     kwdDest,    idestSkip,
  3960.        "comment",  0,      fFalse,     kwdDest,    idestSkip,
  3961.        "creatim",  0,      fFalse,     kwdDest,    idestSkip,
  3962.        "doccomm",  0,      fFalse,     kwdDest,    idestSkip,
  3963.        "fonttbl",  0,      fFalse,     kwdDest,    idestSkip,
  3964.        "footer",   0,      fFalse,     kwdDest,    idestSkip,
  3965.        "footerf",  0,      fFalse,     kwdDest,    idestSkip,
  3966.        "footerl",  0,      fFalse,     kwdDest,    idestSkip,
  3967.        "footerr",  0,      fFalse,     kwdDest,    idestSkip,
  3968.        "footnote", 0,      fFalse,     kwdDest,    idestSkip,
  3969.        "ftncn",    0,      fFalse,     kwdDest,    idestSkip,
  3970.        "ftnsep",   0,      fFalse,     kwdDest,    idestSkip,
  3971.        "ftnsepc",  0,      fFalse,     kwdDest,    idestSkip,
  3972.        "header",   0,      fFalse,     kwdDest,    idestSkip,
  3973.        "headerf",  0,      fFalse,     kwdDest,    idestSkip,
  3974.        "headerl",  0,      fFalse,     kwdDest,    idestSkip,
  3975.        "headerr",  0,      fFalse,     kwdDest,    idestSkip,
  3976.        "info",     0,      fFalse,     kwdDest,    idestSkip,
  3977.        "keywords", 0,      fFalse,     kwdDest,    idestSkip,
  3978.        "operator", 0,      fFalse,     kwdDest,    idestSkip,
  3979.        "pict",     0,      fFalse,     kwdDest,    idestSkip,
  3980.        "printim",  0,      fFalse,     kwdDest,    idestSkip,
  3981.        "private1", 0,      fFalse,     kwdDest,    idestSkip,
  3982.        "revtim",   0,      fFalse,     kwdDest,    idestSkip,
  3983.        "rxe",      0,      fFalse,     kwdDest,    idestSkip,
  3984.        "stylesheet",   0,      fFalse,     kwdDest,    idestSkip,
  3985.        "subject",  0,      fFalse,     kwdDest,    idestSkip,
  3986.        "tc",       0,      fFalse,     kwdDest,    idestSkip,
  3987.        "title",    0,      fFalse,     kwdDest,    idestSkip,
  3988.        "txe",      0,      fFalse,     kwdDest,    idestSkip,
  3989.        "xe",       0,      fFalse,     kwdDest,    idestSkip,
  3990.        "{",        0,      fFalse,     kwdChar,    '{',
  3991.        "}",        0,      fFalse,     kwdChar,    '}',
  3992.        "\\",       0,      fFalse,     kwdChar,    '\\'
  3993.        };
  3994.    int isymMax = sizeof(rgsymRtf) / sizeof(SYM);
  3995.  
  3996.  
  3997.    //
  3998.    // %%Function: ecApplyPropChange
  3999.    //
  4000.    // Set the property identified by _iprop_ to the value _val_.
  4001.    //
  4002.    //
  4003.  
  4004.  
  4005.    int
  4006.    ecApplyPropChange(IPROP iprop, int val)
  4007.    {
  4008.        char *pb;
  4009.  
  4010.  
  4011.        if (rds == rdsSkip)                 // If we're skipping text,
  4012.            return ecOK;                    // don't do anything.
  4013.  
  4014.  
  4015.        switch (rgprop[iprop].prop)
  4016.        {
  4017.        case propDop:
  4018.            pb = (char *)&dop;
  4019.            break;
  4020.        case propSep:
  4021.            pb = (char *)&sep;
  4022.            break;
  4023.        case propPap:
  4024.            pb = (char *)&pap;
  4025.            break;
  4026.        case propChp:
  4027.            pb = (char *)&chp;
  4028.            break;
  4029.        default:
  4030.            if (rgprop[iprop].actn != actnSpec)
  4031.                return ecBadTable;
  4032.            break;
  4033.        }
  4034.        switch (rgprop[iprop].actn)
  4035.        {
  4036.        case actnByte:
  4037.            pb[rgprop[iprop].offset] = (unsigned char) val;
  4038.            break;
  4039.        case actnWord:
  4040.            (*(int *) (pb+rgprop[iprop].offset)) = val;
  4041.            break;
  4042.        case actnSpec:
  4043.            return ecParseSpecialProperty(iprop, val);
  4044.            break;
  4045.        default:
  4046.            return ecBadTable;
  4047.        }
  4048.        return ecOK;
  4049.    }
  4050.  
  4051.  
  4052.    //
  4053.    // %%Function: ecParseSpecialProperty
  4054.    //
  4055.    // Set a property that requires code to evaluate.
  4056.    //
  4057.  
  4058.  
  4059.    int
  4060.    ecParseSpecialProperty(IPROP iprop, int val)
  4061.    {
  4062.        switch (iprop)
  4063.        {
  4064.        case ipropPard:
  4065.            memset(&pap, 0, sizeof(pap));
  4066.            return ecOK;
  4067.        case ipropPlain:
  4068.            memset(&chp, 0, sizeof(chp));
  4069.            return ecOK;
  4070.        case ipropSectd:
  4071.            memset(&sep, 0, sizeof(sep));
  4072.            return ecOK;
  4073.        default:
  4074.            return ecBadTable;
  4075.        }
  4076.        return ecBadTable;
  4077.    }
  4078.  
  4079.  
  4080.    //
  4081.    // %%Function: ecTranslateKeyword.
  4082.    //
  4083.    // Step 3.
  4084.    // Search rgsymRtf for szKeyword and evaluate it appropriately.
  4085.    //
  4086.    // Inputs:
  4087.    // szKeyword:   The RTF control to evaluate.
  4088.    // param:       The parameter of the RTF control.
  4089.    // fParam:      fTrue if the control had a parameter; (that is, if param
  4090.    is valid)
  4091.    //              fFalse if it did not.
  4092.    //
  4093.  
  4094.  
  4095.    int
  4096.    ecTranslateKeyword(char *szKeyword, int param, bool fParam)
  4097.    {
  4098.        int isym;
  4099.  
  4100.  
  4101.        // search for szKeyword in rgsymRtf
  4102.  
  4103.  
  4104.        for (isym = 0; isym < isymMax; isym++)
  4105.            if (strcmp(szKeyword, rgsymRtf[isym].szKeyword) == 0)
  4106.                break;
  4107.        if (isym == isymMax)            // control word not found
  4108.        {
  4109.            if (fSkipDestIfUnk)         // if this is a new destination
  4110.                rds = rdsSkip;          // skip the destination
  4111.                                        // else just discard it
  4112.            fSkipDestIfUnk = fFalse;
  4113.            return ecOK;
  4114.        }
  4115.  
  4116.  
  4117.        // found it!  use kwd and idx to determine what to do with it.
  4118.  
  4119.  
  4120.        fSkipDestIfUnk = fFalse;
  4121.        switch (rgsymRtf[isym].kwd)
  4122.        {
  4123.        case kwdProp:
  4124.            if (rgsymRtf[isym].fPassDflt || !fParam)
  4125.                param = rgsymRtf[isym].dflt;
  4126.            return ecApplyPropChange(rgsymRtf[isym].idx, param);
  4127.        case kwdChar:
  4128.            return ecParseChar(rgsymRtf[isym].idx);
  4129.        case kwdDest:
  4130.            return ecChangeDest(rgsymRtf[isym].idx);
  4131.        case kwdSpec:
  4132.            return ecParseSpecialKeyword(rgsymRtf[isym].idx);
  4133.        default:
  4134.            return ecBadTable;
  4135.        }
  4136.        return ecBadTable;
  4137.    }
  4138.  
  4139.  
  4140.    //
  4141.    // %%Function: ecChangeDest
  4142.    //
  4143.    // Change to the destination specified by idest.
  4144.    // There's usually more to do here than this...
  4145.    //
  4146.  
  4147.  
  4148.    int
  4149.    ecChangeDest(IDEST idest)
  4150.    {
  4151.        if (rds == rdsSkip)             // if we're skipping text,
  4152.            return ecOK;                // don't do anything
  4153.  
  4154.  
  4155.        switch (idest)
  4156.        {
  4157.        default:
  4158.            rds = rdsSkip;              // when in doubt, skip it...
  4159.            break;
  4160.        }
  4161.        return ecOK;
  4162.    }
  4163.  
  4164.  
  4165.    //
  4166.    // %%Function: ecEndGroupAction
  4167.    //
  4168.    // The destination specified by rds is coming to a close.
  4169.    // If there's any cleanup that needs to be done, do it now.
  4170.    //
  4171.  
  4172.  
  4173.    int
  4174.    ecEndGroupAction(RDS rds)
  4175.    {
  4176.        return ecOK;
  4177.    }
  4178.  
  4179.  
  4180.    //
  4181.    // %%Function: ecParseSpecialKeyword
  4182.    //
  4183.    // Evaluate an RTF control that needs special processing.
  4184.    //
  4185.  
  4186.  
  4187.    int
  4188.    ecParseSpecialKeyword(IPFN ipfn)
  4189.    {
  4190.        if (rds == rdsSkip && ipfn != ipfnBin)  // if we're skipping, and
  4191.    it's not
  4192.            return ecOK;                        // the \bin keyword, ignore
  4193.    it.
  4194.        switch (ipfn)
  4195.        {
  4196.        case ipfnBin:
  4197.            ris = risBin;
  4198.            cbBin = lParam;
  4199.            break;
  4200.        case ipfnSkipDest:
  4201.            fSkipDestIfUnk = fTrue;
  4202.            break;
  4203.        case ipfnHex:
  4204.     ris = risHex;
  4205.     break;
  4206.        default:
  4207.            return ecBadTable;
  4208.        }
  4209.        return ecOK;
  4210.    }
  4211.  
  4212. MAKEFILE
  4213.  
  4214.    CFLAGS = /Zi /Od
  4215.  
  4216.  
  4217.    rtfreadr.exe: rtfactn.obj rtfreadr.obj
  4218.    link rtfreadr.obj rtfactn.obj,rtfreadr,rtfreadr,slibce/COD;
  4219.  
  4220.  
  4221.    rtfactn.obj: rtfactn.c rtfdecl.h rtftype.h
  4222.  
  4223.  
  4224.    rtfreadr.obj: rtfreadr.c rtfdecl.h rtftype.h
  4225. APPENDIX B: WORD 6J RICH TEXT FORMAT ADDENDUM
  4226.  
  4227. This document contains the changes to the Rich Text Format (RTF)
  4228. specification for the Japanese version of Word 6.0 (all platforms). In this
  4229. document, Word 6J refers to the Japanese version of Word 6.0 and RTF-J
  4230. refers to the RTF specification described below. This document also
  4231. contains some information about the interpretation of RTF-J and some
  4232. behaviors of Word 6J.
  4233.  
  4234. This document is meant to be used in conjunction with the full RTF
  4235. specification, assumes you have read that document, and does not contain
  4236. the necessary information to implement an RTF reader or writer by itself.
  4237. If you have any questions, please refer to the main specification first.
  4238.  
  4239.                         Appendix B Table of Contents
  4240.  
  4241. RTF-J 73
  4242. ESCAPED EXPRESSIONS 73
  4243. CHARACTER SET 74
  4244.    Character Mapping 74
  4245.        Font Family 74
  4246.           ShiftJIS Font Without \cpg or \fcharset 74
  4247.           Composite Fonts (Associated Fonts for International Runs) 74
  4248.           New Control Words Created by Word 6J 76
  4249.  
  4250.  
  4251.  
  4252. RTF-J
  4253.  
  4254. There is a Japanese local RTF specification, called RTF-J, that is somewhat
  4255. different from the standard RTF specification. Although Word 6J does not
  4256. write RTF-J, it can read RTF-J files. It retains the text strings in the
  4257. file and disregards unknown keywords.
  4258.  
  4259.  
  4260. ESCAPED EXPRESSIONS
  4261.  
  4262. An escape expression (for example, \'hh, \\, or \{) is usable in all RTF
  4263. control words.
  4264.  
  4265. Writer:
  4266.  
  4267. In general RTF should be written out with all characters above 0x80 in the
  4268. escaped form, \'hh.
  4269.  
  4270. |Character code    |Write out as              |
  4271. |0x00 <= ch < 0x20 |Escaped (\'hh)            |
  4272. |0x20 <= ch < 0x80 |Raw (non-escaped)         |
  4273. |                  |character                 |
  4274. |0x80 <= ch <= 0xFF|Escaped (\'hh)            |
  4275.  
  4276.  
  4277. For compatibility there is an RTFParam option in the [Microsoft Word]
  4278. section of the WORD6.INI file (which is the same as the WINWORD6.INI file
  4279. in the U.S. version) that determines whether raw 8-bit characters or
  4280. escaped characters are used for the double-byte characters in \stylesheet,
  4281. \fonttbl, \bkmkstart, and \bkmkend. This option is valid only when writing
  4282. out the RTF; it does not affect RTF reading behavior.
  4283.  
  4284.   [Microsoft Word]
  4285.  
  4286.   RTFParam=7 (the default) uses an escaped expression when the character is
  4287.   above 0x80.
  4288.  
  4289.   RTFParam=8 uses raw 8-bit characters for \stylesheet, \fonttbl,
  4290.   \bkmkstart, and \bkmkend (does not escape even if trailing-byte was an
  4291.   RTF special character such as \, {, or }).
  4292.  
  4293. Reader:
  4294.  
  4295. When the RTF reader encounters raw characters in the leading-byte range of
  4296. the double-byte character, it regards the next character as the trailing
  4297. byte of the double-byte character and combines the two characters into one
  4298. double-byte character.
  4299.  
  4300. |Leading    |Trailing byte      |Validity                        |
  4301. |byte       |                   |                                |
  4302. |Escaped    |Raw (0x20 <= ch <= |Valid (standard format for      |
  4303. |           |0x7f)              |double-byte character)          |
  4304. |Escaped    |Escaped (other)    |Valid (standard format for      |
  4305. |           |                   |double-byte character)          |
  4306. |Raw        |Raw                |Valid (RTF-J format for         |
  4307. |           |                   |double-byte character)          |
  4308. |Raw        |Escaped            |Invalid                         |
  4309.  
  4310.  
  4311. Character Set
  4312.  
  4313. Word 6J specifies the character set in the font table using \fcharset. Word
  4314. 6.0J interprets \cpg437 as \fcharset0 and \cpg932 as \fcharset128 if it
  4315. encounters these keywords when reading RTF. If both \fcharset and \cpg
  4316. appear in the font table, \cpg is ignored.
  4317.  
  4318.  
  4319. Character Mapping
  4320.  
  4321. Word maps single-byte characters according to character set information
  4322. (for example, Macintosh to ANSI) and leaves double-byte characters
  4323. unmapped.
  4324.  
  4325.  
  4326. Font Family
  4327.  
  4328. |RTF-J keywords  |Definition and Word’s interpretation                         |
  4329. |\ jis           |RTF-J uses \jis as a keyword for character set. Word 6J      |
  4330. |                |interprets this as \ansi, which is the default character set |
  4331. |                |used if the character set is not defined.                    |
  4332. |\fjminchou and  |RTF-J uses \fjminchou and \fjgothic to specify font family.  |
  4333. |\fjgothic       |Word 6J interprets these as \fnil, which is the default font |
  4334. |                |family.                                                      |
  4335.  
  4336.  
  4337. ShiftJIS Font Without \cpg or \fcharset
  4338.  
  4339. If \cpg or \fcharset keywords are not present, Word 6J uses the text
  4340. metrics of the font before determining the character set of these fonts. If
  4341. the font is unknown, Word 6J assumes it is SHIFTJIS_CHARSET.
  4342.  
  4343.  
  4344. Composite Fonts (Associated Fonts for International Runs)
  4345.  
  4346. Word 6J defines control words to specify composite fonts as associated
  4347. character properties. These control words follow the rule of associated
  4348. character properties and understand font designation (\af). All other
  4349. <aprops> are ignored in Word 6J.
  4350.  
  4351. |<atext>         |<losbrun> | <hisbrun> | <dbrun>                              |
  4352. |<losbrun>       |\hich \af & <aprops> \dbch \af & <aprops> \loch <ptext>      |
  4353. |<hisbrun>       |\loch \af & <aprops> \dbch \af & <aprops> \hich <ptext>      |
  4354. |<dbrun>         |\loch \af & <aprops> \hich \af & <aprops> \dbch <ptext>      |
  4355. |Control word    |Definition                                                   |
  4356. |\ loch          |Specifies a run of the characters in the low-ANSI (0x00–0x7F)|
  4357. |                |area.                                                        |
  4358. |\hich           |For the characters in the high-ANSI (0x80–-0xFF) area.       |
  4359. |\dbch           |Specifies a run of the double-byte characters.               |
  4360.  
  4361.  
  4362. Word 6J writes out associated character properties in the styles. In the
  4363. style sheet, the <dbrun> definition should be used for compatibility with
  4364. applications that have transparent readers.
  4365.  
  4366.      {\stylesheet{\loch\af5\hich\af5\dbch\f27\fs20\snext0 Normal;}}
  4367.  
  4368. If the composite font definition matches the style, only the control word
  4369. (\loch, \hich, or \dbch) will be used to distinguish the type of run, along
  4370. with the font information for transparent readers.
  4371.  
  4372.    {\fonttbl{\f5\fswiss\fcharset0\fprq2
  4373.    Arial;}{\f27\froman\fcharset128\fprq1 Mincho;}}
  4374.    {\stylesheet{\loch\af5\hich\af5\dbch\f27\fs20\snext0 Normal;}}
  4375.    \pard\plain
  4376.    {\dbch\f27\fs20 \'82\'b1\'82\'ea\'82\'cd}
  4377.    {\loch\f5 Test }
  4378.    {\dbch\f27\'82\'c5\'82\'b7\'81B}
  4379.    \par}
  4380.  
  4381. If one or all of \loch, \hich, and \dbch are missing from the style sheet
  4382. definition (or the character set doesn't match), Word 6J will apply
  4383. appropriate fonts to each character run in the style using the bulleted
  4384. rules below.
  4385.  
  4386. |Control word    |Font that Word 6J will apply                                 |
  4387. |\loch           |Same font as \f.                                             |
  4388. |\hich           |Any font whose character set is ANSI_CHARSET.                |
  4389. |\dbch           |Any font whose character set is SHIFTJIS_CHARSET.            |
  4390.  
  4391.  
  4392. If the composite font control words are missing from the character run,
  4393. Word 6J will interpret all characters below 0x80 as a \loch run. Characters
  4394. above or equal to 0x80 will be determined using the following rules:
  4395.  
  4396.  If the character is in the leading-byte range and the next character is in
  4397.    the trailing-byte range of a double-byte character, it will be treated as
  4398.    a \dbch run (one double-byte character). For example:
  4399.  
  4400.        \'99\'47[pic]
  4401.  
  4402.  If the character is in the leading-byte range of a double-byte character
  4403.    but the next character is not in the trailing-byte range, it will be
  4404.    treated as a \hich run (two high-ANSI or low-ANSI characters). For
  4405.    example:
  4406.  
  4407.        \'99\'FF™ÿ
  4408.  
  4409.  If the character is in the leading-byte range of a double-byte character
  4410.    and is the last character in the run, it will be treated as a \hich run
  4411.    (one high-ANSI character). For example:
  4412.  
  4413.        \'99\par™
  4414.  
  4415.  If the character is not in the leading-byte range of a double-byte
  4416.    character, it will be treated as a \hich run (one high-ANSI character).
  4417.    For example:
  4418.  
  4419.        \'FFÿ
  4420.  
  4421.  
  4422. New Control Words Created by Word 6J
  4423.  
  4424.  
  4425. Associated Character Properties
  4426.  
  4427. |Control word    |Description                                                  |
  4428. |\loch           |The text consists of single-byte low-ANSI (0x00–0x7F)        |
  4429. |                |characters.                                                  |
  4430. |\hich           |The text consists of single-byte high-ANSI (0x80–0xFF)       |
  4431. |                |characters.                                                  |
  4432. |\dbch           |The text consists of double-byte characters.                 |
  4433. |Borders                                                                        |
  4434. |\brdrdash       |Dashed border.                                               |
  4435. |\brdrdashd      |Dash-dotted border.                                          |
  4436. |\brdrdashdd     |Dash-dot-dotted border.                                      |
  4437. |Character Properties                                                           |
  4438. |\uldash         |Dashed underline.                                            |
  4439. |\uldashd        |Dash-dotted underline.                                       |
  4440. |\uldashdd       |Dash-dot-dotted underline.                                   |
  4441. |\ulhair         |Hairline underline.                                          |
  4442. |\ulth           |Thick underline.                                             |
  4443. |\ulwave         |Wave underline.                                              |
  4444. |Document Formatting Properties                                                 |
  4445. |\horzdoc        |Horizontal rendering.                                        |
  4446. |\vertdoc        |Vertical rendering.                                          |
  4447. |\*\fchars       |List of following kinsoku characters.                        |
  4448. |\*\lchars       |List of leading kinsoku characters.                          |
  4449. |\jcompress      |Compressing justification (default).                         |
  4450. |\jexpand        |Expanding justification.                                     |
  4451. |\gutterprl      |Parallel gutter.                                             |
  4452. |\dgsnap         |Snap to grid.                                                |
  4453. |\dghspaceN      |Grid horizontal spacing in twips (the default is 120).       |
  4454. |\dgvspaceN      |Grid vertical spacing in twips (the default is 120).         |
  4455. |\dghoriginN     |Grid horizontal origin in twips (the default is 1701).       |
  4456. |\dgvoriginN     |Grid vertical origin in twips (the default is 1984).         |
  4457. |\dghshowN       |Show Nth horizontal grid (the default is 3).                 |
  4458. |\dgvshowN       |Show Nth vertical grid (the default is 0).                   |
  4459. |Bullets and Numbering                                                          |
  4460. |\pndecd         |Double-byte decimal numbering (\*arabic\*dbchar).            |
  4461. |\pndbnum        |Kanji numbering without the digit character (\*dbnum1).      |
  4462. |\pnaiu          |46 phonetic katakana characters in "aiueo" order (\*aiueo).  |
  4463. |\pnaiud         |46 phonetic double-byte katakana characters                  |
  4464. |                |(\*aiueo\*dbchar).                                           |
  4465. |\pniroha        |46 phonetic katakana characters in "iroha" order (\*iroha).  |
  4466. |\pnirohad       |46 phonetic double-byte katakana characters                  |
  4467. |                |(\*iroha\*dbchar).                                           |
  4468. |\pncnum         |20 numbered list in circle (\*circlenum).                    |
  4469. |\pnuldash       |Dashed underline.                                            |
  4470. |\pnuldashd      |Dash-dotted underline.                                       |
  4471. |\pnuldashdd     |Dash-dot-dotted underline.                                   |
  4472. |\pnulhair       |Hairline underline.                                          |
  4473. |\pnulth         |Thick underline.                                             |
  4474. |\pnulwave       |Wave underline.                                              |
  4475. |Drawing Objects                                                                |
  4476. |\dptxlrtb       |Text box flows from left to right and top to bottom          |
  4477. |                |(default).                                                   |
  4478. |\dptxtbrl       |Text box flows from right to left and top to bottom.         |
  4479. |\dptxbtlr       |Text box flows from left to right and bottom to top.         |
  4480. |\dptxlrtbv      |Text box flows from left to right and top to bottom,         |
  4481. |                |vertically.                                                  |
  4482. |\dptxtbrlv      |Text box flows from top to bottom and right to left,         |
  4483. |                |vertically.                                                  |
  4484. |Index Entries                                                                  |
  4485. |\*\pxe          |"Yomi" (pronunciation) for index entry.                      |
  4486. |Paragraph Properties                                                           |
  4487. |\nocwrap        |No character wrapping.                                       |
  4488. |\nowwrap        |No word wrapping.                                            |
  4489. |\qd             |Distributed.                                                 |
  4490. |\nooverflow     |No overflow period and comma.                                |
  4491. |\aspalpha       |Auto spacing between DBC and English.                        |
  4492. |\aspnum         |Auto spacing between DBC and numbers.                        |
  4493. |\fahang         |Font alignment  Hanging.                                     |
  4494. |\facenter       |Font alignment  Center.                                      |
  4495. |\faroman        |Font alignment  Roman (default).                             |
  4496. |\favar          |Font alignment  Upholding variable.                          |
  4497. |\fafixed        |Font alignment  Upholding fixed.                             |
  4498. |Section Formatting Properties                                                  |
  4499. |\horzsect       |Horizontal rendering.                                        |
  4500. |\vertsect       |Vertical rendering.                                          |
  4501. |\pgndecd        |Double-byte decimal numbering.                               |
  4502. |\pgndbnum       |Kanji numbering without the digit character.                 |
  4503. |\pgndbnumd      |Kanji numbering with the digit character.                    |
  4504. |Special Characters                                                             |
  4505. |\zwbo           |Zero-width break opportunity. Used to insert break           |
  4506. |                |opportunity between two characters.                          |
  4507. |\zwnbo          |Zero-width nonbreak opportunity. Used to remove break        |
  4508. |                |opportunity between two characters.                          |
  4509. |\qmspace        |One-quarter em space.                                        |
  4510. |Tabs                                                                           |
  4511. |\tlmdot         |Leader middle dots.                                          |
  4512.  
  4513. APPENDIX C: INDEX OF RTF CONTROL WORDS
  4514.  
  4515. The following table contains a list of each RTF control word, the name of
  4516. the section where it may be found, and a brief description of the type of
  4517. control word. The types are described in the following table.
  4518.  
  4519. |Type         |Description                                                  |
  4520. |Flag         |The control word ignores any parameter.                      |
  4521. |Destination  |This control word starts a group or destination. It ignores  |
  4522. |             |any parameter.                                               |
  4523. |Symbol       |This control word represents a special character.            |
  4524. |Toggle       |This control word distinguishes between the ON and OFF states|
  4525. |             |for the given property. The control word with no parameter or|
  4526. |             |a nonzero parameter is used to turn on the property, while   |
  4527. |             |the control word with a zero parameter is used to turn it    |
  4528. |             |off.                                                         |
  4529. |Value        |This control word requires a parameter.                      |
  4530.  
  4531.  
  4532.    Note: In the following comprehensive table, the names of all control
  4533.    words that are new to Microsoft Word version 6.0 are followed by an
  4534.    asterisk (*).
  4535.  
  4536. |Control word   |Described in section     |Type                             |
  4537. |\ '            |Special Characters       |Symbol                           |
  4538. |\ *            |Special Characters       |Symbol                           |
  4539. |\ -            |Special Characters       |Symbol                           |
  4540. |\ :            |Special Characters       |Symbol                           |
  4541. |\ \            |Special Characters       |Symbol                           |
  4542. |\ _            |Special Characters       |Symbol                           |
  4543. |\ {            |Special Characters       |Symbol                           |
  4544. |\ |            |Special Characters       |Symbol                           |
  4545. |\ }            |Special Characters       |Symbol                           |
  4546. |\ ~            |Special Characters       |Symbol                           |
  4547. |\ ab           |Associated Character     |Toggle                           |
  4548. |               |Properties               |                                 |
  4549. |\ absh         |Positioned Objects and   |Value                            |
  4550. |               |Frames                   |                                 |
  4551. |\ absw         |Positioned Objects and   |Value                            |
  4552. |               |Frames                   |                                 |
  4553. |\ acaps        |Associated Character     |Toggle                           |
  4554. |               |Properties               |                                 |
  4555. |\ acf          |Associated Character     |Value                            |
  4556. |               |Properties               |                                 |
  4557. |\ additive *   |Style Sheet              |Flag                             |
  4558. |\ adn          |Associated Character     |Value                            |
  4559. |               |Properties               |                                 |
  4560. |\ aenddoc *    |Document Formatting      |Flag                             |
  4561. |               |Properties               |                                 |
  4562. |\ aendnotes *  |Document Formatting      |Flag                             |
  4563. |               |Properties               |                                 |
  4564. |\ aexpnd       |Associated Character     |Value                            |
  4565. |               |Properties               |                                 |
  4566. |\ af           |Associated Character     |Value                            |
  4567. |               |Properties               |                                 |
  4568. |\ afs          |Associated Character     |Value                            |
  4569. |               |Properties               |                                 |
  4570. |\ aftnbj *     |Document Formatting      |Flag                             |
  4571. |               |Properties               |                                 |
  4572. |\ aftncn *     |Document Formatting      |Destination                      |
  4573. |               |Properties               |                                 |
  4574. |\ aftnnalc *   |Document Formatting      |Flag                             |
  4575. |               |Properties               |                                 |
  4576. |\ aftnnar *    |Document Formatting      |Flag                             |
  4577. |               |Properties               |                                 |
  4578. |\ aftnnauc *   |Document Formatting      |Flag                             |
  4579. |               |Properties               |                                 |
  4580. |\ aftnnchi *   |Document Formatting      |Flag                             |
  4581. |               |Properties               |                                 |
  4582. |\ aftnnrlc *   |Document Formatting      |Flag                             |
  4583. |               |Properties               |                                 |
  4584. |\ aftnnruc *   |Document Formatting      |Flag                             |
  4585. |               |Properties               |                                 |
  4586. |\ aftnrestart *|Document Formatting      |Flag                             |
  4587. |               |Properties               |                                 |
  4588. |\ aftnrstcont *|Document Formatting      |Flag                             |
  4589. |               |Properties               |                                 |
  4590. |\ aftnsep *    |Document Formatting      |Destination                      |
  4591. |               |Properties               |                                 |
  4592. |\ aftnsepc *   |Document Formatting      |Destination                      |
  4593. |               |Properties               |                                 |
  4594. |\ aftnstart *  |Document Formatting      |Value                            |
  4595. |               |Properties               |                                 |
  4596. |\ aftntj *     |Document Formatting      |Flag                             |
  4597. |               |Properties               |                                 |
  4598. |\ ai           |Associated Character     |Toggle                           |
  4599. |               |Properties               |                                 |
  4600. |\ alang        |Associated Character     |Value                            |
  4601. |               |Properties               |                                 |
  4602. |\ allprot *    |Document Formatting      |Flag                             |
  4603. |               |Properties               |                                 |
  4604. |\ alt          |Style Sheet              |Flag                             |
  4605. |\ annotation   |Annotations              |Destination                      |
  4606. |\ annotprot *  |Document Formatting      |Flag                             |
  4607. |               |Properties               |                                 |
  4608. |\ ansi         |Character Set            |Flag                             |
  4609. |\ aoutl        |Associated Character     |Toggle                           |
  4610. |               |Properties               |                                 |
  4611. |\ ascaps       |Associated Character     |Toggle                           |
  4612. |               |Properties               |                                 |
  4613. |\ ashad        |Associated Character     |Toggle                           |
  4614. |               |Properties               |                                 |
  4615. |\ astrike      |Associated Character     |Toggle                           |
  4616. |               |Properties               |                                 |
  4617. |\ atnauthor *  |Annotations              |Destination                      |
  4618. |\ atnicn       |Annotations              |Destination                      |
  4619. |\ atnid        |Annotations              |Destination                      |
  4620. |\ atnref *     |Annotations              |Destination                      |
  4621. |\ atntime      |Annotations              |Destination                      |
  4622. |\ atrfend *    |Annotations              |Destination                      |
  4623. |\ atrfstart *  |Annotations              |Destination                      |
  4624. |\ aul          |Associated Character     |Toggle                           |
  4625. |               |Properties               |                                 |
  4626. |\ auld         |Associated Character     |Toggle                           |
  4627. |               |Properties               |                                 |
  4628. |\ auldb        |Associated Character     |Toggle                           |
  4629. |               |Properties               |                                 |
  4630. |\ aulnone      |Associated Character     |Toggle                           |
  4631. |               |Properties               |                                 |
  4632. |\ aulw         |Associated Character     |Toggle                           |
  4633. |               |Properties               |                                 |
  4634. |\ aup          |Associated Character     |Value                            |
  4635. |               |Properties               |                                 |
  4636. |\ author       |Information Group        |Destination                      |
  4637. |\ b            |Character Formatting     |Toggle                           |
  4638. |               |Properties               |                                 |
  4639. |\ bgbdiag      |Paragraph Shading        |Flag                             |
  4640. |\ bgcross      |Paragraph Shading        |Flag                             |
  4641. |\ bgdcross     |Paragraph Shading        |Flag                             |
  4642. |\ bgdkbdiag    |Paragraph Shading        |Flag                             |
  4643. |\ bgdkcross    |Paragraph Shading        |Flag                             |
  4644. |\ bgdkdcross   |Paragraph Shading        |Flag                             |
  4645. |\ bgdkfdiag    |Paragraph Shading        |Flag                             |
  4646. |\ bgdkhoriz    |Paragraph Shading        |Flag                             |
  4647. |\ bgdkvert     |Paragraph Shading        |Flag                             |
  4648. |\ bgfdiag      |Paragraph Shading        |Flag                             |
  4649. |\ bghoriz      |Paragraph Shading        |Flag                             |
  4650. |\ bgvert       |Paragraph Shading        |Flag                             |
  4651. |\ bin          |Pictures                 |Value                            |
  4652. |\ binfsxn      |Section Formatting       |Value                            |
  4653. |               |Properties               |                                 |
  4654. |\ binsxn       |Section Formatting       |Value                            |
  4655. |               |Properties               |                                 |
  4656. |\ bkmkcolf     |Bookmarks                |Value                            |
  4657. |\ bkmkcoll     |Bookmarks                |Value                            |
  4658. |\ bkmkend      |Bookmarks                |Destination                      |
  4659. |\ bkmkpub      |Macintosh Edition Manager|Flag                             |
  4660. |               |Publisher Objects        |                                 |
  4661. |\ bkmkstart    |Bookmarks                |Destination                      |
  4662. |\ blue         |Color Table              |Value                            |
  4663. |\ box          |Paragraph Borders        |Flag                             |
  4664. |\ brdrb        |Paragraph Borders        |Flag                             |
  4665. |\ brdrbar      |Paragraph Borders        |Flag                             |
  4666. |\ brdrbtw      |Paragraph Borders        |Flag                             |
  4667. |\ brdrcf       |Paragraph Borders        |Value                            |
  4668. |\ brdrdash *   |Paragraph Borders        |Flag                             |
  4669. |\ brdrdb       |Paragraph Borders        |Flag                             |
  4670. |\ brdrdot      |Paragraph Borders        |Flag                             |
  4671. |\ brdrhair     |Paragraph Borders        |Flag                             |
  4672. |\ brdrl        |Paragraph Borders        |Flag                             |
  4673. |\ brdrr        |Paragraph Borders        |Flag                             |
  4674. |\ brdrs        |Paragraph Borders        |Flag                             |
  4675. |\ brdrsh       |Paragraph Borders        |Flag                             |
  4676. |\ brdrt        |Paragraph Borders        |Flag                             |
  4677. |\ brdrth       |Paragraph Borders        |Flag                             |
  4678. |\ brdrw        |Paragraph Borders        |Value                            |
  4679. |\ brkfrm *     |Document Formatting      |Flag                             |
  4680. |               |Properties               |                                 |
  4681. |\ brsp         |Paragraph Borders        |Value                            |
  4682. |\ bullet       |Special Characters       |Symbol                           |
  4683. |\ buptim       |Information Group        |Destination                      |
  4684. |\ bxe          |Index Entries            |Flag                             |
  4685. |\ caps         |Character Formatting     |Toggle                           |
  4686. |               |Properties               |                                 |
  4687. |\ cb           |Character Formatting     |Value                            |
  4688. |               |Properties               |                                 |
  4689. |\ cbpat        |Paragraph Shading        |Value                            |
  4690. |\ cchs *       |Character Formatting     |Value                            |
  4691. |               |Properties               |                                 |
  4692. |\ cell         |Special Characters       |Symbol                           |
  4693. |\ cellx        |Table Definitions        |Value                            |
  4694. |\ cf           |Character Formatting     |Value                            |
  4695. |               |Properties               |                                 |
  4696. |\ cfpat        |Paragraph Shading        |Value                            |
  4697. |\ chatn        |Special Characters       |Symbol                           |
  4698. |\ chdate       |Special Characters       |Symbol                           |
  4699. |\ chdpa        |Special Characters       |Symbol                           |
  4700. |\ chdpl        |Special Characters       |Symbol                           |
  4701. |\ chftn        |Special Characters       |Symbol                           |
  4702. |\ chftnsep     |Special Characters       |Symbol                           |
  4703. |\ chftnsepc    |Special Characters       |Symbol                           |
  4704. |\ chpgn        |Special Characters       |Symbol                           |
  4705. |\ chtime       |Special Characters       |Symbol                           |
  4706. |\ clbgbdiag    |Table Definitions        |Flag                             |
  4707. |\ clbgcross    |Table Definitions        |Flag                             |
  4708. |\ clbgdcross   |Table Definitions        |Flag                             |
  4709. |\ clbgdkbdiag  |Table Definitions        |Flag                             |
  4710. |\ clbgdkcross  |Table Definitions        |Flag                             |
  4711. |\ clbgdkdcross |Table Definitions        |Flag                             |
  4712. |\ clbgdkfdiag  |Table Definitions        |Flag                             |
  4713. |\ clbgdkhor    |Table Definitions        |Flag                             |
  4714. |\ clbgdkvert   |Table Definitions        |Flag                             |
  4715. |\ clbgfdiag    |Table Definitions        |Flag                             |
  4716. |\ clbghoriz    |Table Definitions        |Flag                             |
  4717. |\ clbgvert     |Table Definitions        |Flag                             |
  4718. |\ clbrdrb      |Table Definitions        |Flag                             |
  4719. |\ clbrdrl      |Table Definitions        |Flag                             |
  4720. |\ clbrdrr      |Table Definitions        |Flag                             |
  4721. |\ clbrdrt      |Table Definitions        |Flag                             |
  4722. |\ clcbpat      |Table Definitions        |Value                            |
  4723. |\ clcfpat      |Table Definitions        |Value                            |
  4724. |\ clmgf        |Table Definitions        |Flag                             |
  4725. |\ clmrg        |Table Definitions        |Flag                             |
  4726. |\ clshdng      |Table Definitions        |Value                            |
  4727. |\ colno *      |Section Formatting       |Value                            |
  4728. |               |Properties               |                                 |
  4729. |\ colortbl     |Color Table              |Destination                      |
  4730. |\ cols         |Section Formatting       |Value                            |
  4731. |               |Properties               |                                 |
  4732. |\ colsr *      |Section Formatting       |Value                            |
  4733. |               |Properties               |                                 |
  4734. |\ colsx        |Section Formatting       |Value                            |
  4735. |               |Properties               |                                 |
  4736. |\ column       |Special Characters       |Symbol                           |
  4737. |\ colw *       |Section Formatting       |Value                            |
  4738. |               |Properties               |                                 |
  4739. |\ comment      |Information Group        |Destination                      |
  4740. |\ cpg          |Code Page Support        |Value                            |
  4741. |\ creatim      |Information Group        |Destination                      |
  4742. |\ cs           |Character Formatting     |Value                            |
  4743. |               |Properties               |                                 |
  4744. |\ ctrl         |Style Sheet              |Flag                             |
  4745. |\ cvmme *      |Document Formatting      |Flag                             |
  4746. |               |Properties               |                                 |
  4747. |\ datafield *  |Fields                   |Destination                      |
  4748. |\ deff         |Font Table               |Value                            |
  4749. |\ defformat    |Document Formatting      |Flag                             |
  4750. |               |Properties               |                                 |
  4751. |\ deflang      |Document Formatting      |Value                            |
  4752. |               |Properties               |                                 |
  4753. |\ deftab       |Document Formatting      |Value                            |
  4754. |               |Properties               |                                 |
  4755. |\ deleted      |Character Formatting     |Toggle                           |
  4756. |               |Properties               |                                 |
  4757. |\ dfrmtxtx     |Positioned Objects and   |Value                            |
  4758. |               |Frames                   |                                 |
  4759. |\ dfrmtxty     |Positioned Objects and   |Value                            |
  4760. |               |Frames                   |                                 |
  4761. |\ dibitmap     |Pictures                 |Value                            |
  4762. |\ dn           |Character Formatting     |Value                            |
  4763. |               |Properties               |                                 |
  4764. |\ do *         |Drawing Objects          |Destination                      |
  4765. |\ dobxcolumn * |Drawing Objects          |Flag                             |
  4766. |\ dobxmargin * |Drawing Objects          |Flag                             |
  4767. |\ dobxpage *   |Drawing Objects          |Flag                             |
  4768. |\ dobymargin * |Drawing Objects          |Flag                             |
  4769. |\ dobypage *   |Drawing Objects          |Flag                             |
  4770. |\ dobypara *   |Drawing Objects          |Flag                             |
  4771. |\ doccomm      |Information Group        |Destination                      |
  4772. |\ doctemp      |Document Formatting      |Flag                             |
  4773. |               |Properties               |                                 |
  4774. |\ dodhgt *     |Drawing Objects          |Value                            |
  4775. |\ dolock *     |Drawing Objects          |Flag                             |
  4776. |\ dpaendhol *  |Drawing Objects          |Flag                             |
  4777. |\ dpaendl *    |Drawing Objects          |Value                            |
  4778. |\ dpaendsol *  |Drawing Objects          |Flag                             |
  4779. |\ dpaendw *    |Drawing Objects          |Value                            |
  4780. |\ dparc *      |Drawing Objects          |Flag                             |
  4781. |\ dparcflipx * |Drawing Objects          |Flag                             |
  4782. |\ dparcflipy * |Drawing Objects          |Flag                             |
  4783. |\ dpastarthol *|Drawing Objects          |Flag                             |
  4784. |\ dpastartl *  |Drawing Objects          |Value                            |
  4785. |\ dpastartsol *|Drawing Objects          |Flag                             |
  4786. |\ dpastartw *  |Drawing Objects          |Value                            |
  4787. |\ dpcallout *  |Drawing Objects          |Flag                             |
  4788. |\ dpcoa *      |Drawing Objects          |Value                            |
  4789. |\ dpcoaccent * |Drawing Objects          |Flag                             |
  4790. |\ dpcobestfit *|Drawing Objects          |Flag                             |
  4791. |\ dpcoborder * |Drawing Objects          |Flag                             |
  4792. |\ dpcodabs *   |Drawing Objects          |Value                            |
  4793. |\ dpcodbottom *|Drawing Objects          |Flag                             |
  4794. |\ dpcodcenter *|Drawing Objects          |Flag                             |
  4795. |\ dpcodtop *   |Drawing Objects          |Flag                             |
  4796. |\ dpcolength * |Drawing Objects          |Value                            |
  4797. |\ dpcominusx * |Drawing Objects          |Flag                             |
  4798. |\ dpcominusy * |Drawing Objects          |Flag                             |
  4799. |\ dpcooffset * |Drawing Objects          |Value                            |
  4800. |\ dpcosmarta * |Drawing Objects          |Flag                             |
  4801. |\ dpcotdouble *|Drawing Objects          |Flag                             |
  4802. |\ dpcotright * |Drawing Objects          |Flag                             |
  4803. |\ dpcotsingle *|Drawing Objects          |Flag                             |
  4804. |\ dpcottriple *|Drawing Objects          |Flag                             |
  4805. |\ dpcount *    |Drawing Objects          |Value                            |
  4806. |\ dpellipse *  |Drawing Objects          |Flag                             |
  4807. |\ dpendgroup * |Drawing Objects          |Flag                             |
  4808. |\ dpfillbgcb * |Drawing Objects          |Value                            |
  4809. |\ dpfillbgcg * |Drawing Objects          |Value                            |
  4810. |\ dpfillbgcr * |Drawing Objects          |Value                            |
  4811. |\ dpfillbggray |Drawing Objects          |Value                            |
  4812. |*              |                         |                                 |
  4813. |\ dpfillbgpal *|Drawing Objects          |Flag                             |
  4814. |\ dpfillfgcb * |Drawing Objects          |Value                            |
  4815. |\ dpfillfgcg * |Drawing Objects          |Value                            |
  4816. |\ dpfillfgcr * |Drawing Objects          |Value                            |
  4817. |\ dpfillfggray |Drawing Objects          |Value                            |
  4818. |*              |                         |                                 |
  4819. |\ dpfillfgpal *|Drawing Objects          |Flag                             |
  4820. |\ dpfillpat *  |Drawing Objects          |Value                            |
  4821. |\ dpgroup *    |Drawing Objects          |Flag                             |
  4822. |\ dpline *     |Drawing Objects          |Flag                             |
  4823. |\ dplinecob *  |Drawing Objects          |Value                            |
  4824. |\ dplinecog *  |Drawing Objects          |Value                            |
  4825. |\ dplinecor *  |Drawing Objects          |Value                            |
  4826. |\ dplinedado * |Drawing Objects          |Flag                             |
  4827. |\ dplinedadodo |Drawing Objects          |Flag                             |
  4828. |*              |                         |                                 |
  4829. |\ dplinedash * |Drawing Objects          |Flag                             |
  4830. |\ dplinedot *  |Drawing Objects          |Flag                             |
  4831. |\ dplinegray * |Drawing Objects          |Value                            |
  4832. |\ dplinehollow |Drawing Objects          |Flag                             |
  4833. |*              |                         |                                 |
  4834. |\ dplinepal *  |Drawing Objects          |Flag                             |
  4835. |\ dplinesolid *|Drawing Objects          |Flag                             |
  4836. |\ dplinew *    |Drawing Objects          |Value                            |
  4837. |\ dppolycount *|Drawing Objects          |Value                            |
  4838. |\ dppolygon *  |Drawing Objects          |Flag                             |
  4839. |\ dppolyline * |Drawing Objects          |Flag                             |
  4840. |\ dpptx *      |Drawing Objects          |Value                            |
  4841. |\ dppty *      |Drawing Objects          |Value                            |
  4842. |\ dprect *     |Drawing Objects          |Flag                             |
  4843. |\ dproundr *   |Drawing Objects          |Flag                             |
  4844. |\ dpshadow *   |Drawing Objects          |Flag                             |
  4845. |\ dpshadx *    |Drawing Objects          |Value                            |
  4846. |\ dpshady *    |Drawing Objects          |Value                            |
  4847. |\ dptxbx *     |Drawing Objects          |Flag                             |
  4848. |\ dptxbxmar *  |Drawing Objects          |Value                            |
  4849. |\ dptxbxtext * |Drawing Objects          |Destination                      |
  4850. |\ dpx *        |Drawing Objects          |Value                            |
  4851. |\ dpxsize *    |Drawing Objects          |Value                            |
  4852. |\ dpy *        |Drawing Objects          |Value                            |
  4853. |\ dpysize *    |Drawing Objects          |Value                            |
  4854. |\ dropcapli *  |Positioned Objects and   |Value                            |
  4855. |               |Frames                   |                                 |
  4856. |\ dropcapt *   |Positioned Objects and   |Value                            |
  4857. |               |Frames                   |                                 |
  4858. |\ ds           |Section Formatting       |Value                            |
  4859. |               |Properties               |                                 |
  4860. |\ dxfrtext     |Positioned Objects and   |Value                            |
  4861. |               |Frames                   |                                 |
  4862. |\ dy           |Information Group        |Value                            |
  4863. |\ edmins       |Information Group        |Value                            |
  4864. |\ emdash       |Special Characters       |Symbol                           |
  4865. |\ emspace *    |Special Characters       |Symbol                           |
  4866. |\ endash       |Special Characters       |Symbol                           |
  4867. |\ enddoc       |Document Formatting      |Flag                             |
  4868. |               |Properties               |                                 |
  4869. |\ endnhere     |Section Formatting       |Flag                             |
  4870. |               |Properties               |                                 |
  4871. |\ endnotes     |Document Formatting      |Flag                             |
  4872. |               |Properties               |                                 |
  4873. |\ enspace *    |Special Characters       |Symbol                           |
  4874. |\ expnd        |Character Formatting     |Value                            |
  4875. |               |Properties               |                                 |
  4876. |\ expndtw *    |Character Formatting     |Value                            |
  4877. |               |Properties               |                                 |
  4878. |\ f            |Character Formatting     |Value                            |
  4879. |               |Properties               |                                 |
  4880. |\ facingp      |Document Formatting      |Flag                             |
  4881. |               |Properties               |                                 |
  4882. |\ falt *       |Font Table               |Destination                      |
  4883. |\ fbidi        |Font Table               |Flag                             |
  4884. |\ fcharset *   |Font Table               |Value                            |
  4885. |\ fdecor       |Font Table               |Flag                             |
  4886. |\ fet *        |Document Formatting      |Value                            |
  4887. |               |Properties               |                                 |
  4888. |\ fi           |Paragraph Formatting     |Value                            |
  4889. |               |Properties               |                                 |
  4890. |\ fid *        |File Table               |Value                            |
  4891. |\ field        |Fields                   |Destination                      |
  4892. |\ file *       |File Table               |Destination                      |
  4893. |\ filetbl *    |File Table               |Destination                      |
  4894. |\ fldalt *     |Document Formatting      |Flag                             |
  4895. |               |Properties               |                                 |
  4896. |\ flddirty     |Fields                   |Flag                             |
  4897. |\ fldedit      |Fields                   |Flag                             |
  4898. |\ fldinst      |Fields                   |Destination                      |
  4899. |\ fldlock      |Fields                   |Flag                             |
  4900. |\ fldpriv      |Fields                   |Flag                             |
  4901. |\ fldrslt      |Fields                   |Destination                      |
  4902. |\ fmodern      |Font Table               |Flag                             |
  4903. |\ fn           |Style Sheet              |Value                            |
  4904. |\ fnetwork *   |File Table               |Flag                             |
  4905. |\ fnil         |Font Table               |Flag                             |
  4906. |\ fontemb      |Font Table               |Destination                      |
  4907. |\ fontfile     |Font Table               |Destination                      |
  4908. |\ fonttbl      |Font Table               |Destination                      |
  4909. |\ footer       |Headers and Footers      |Destination                      |
  4910. |\ footerf      |Headers and Footers      |Destination                      |
  4911. |\ footerl      |Headers and Footers      |Destination                      |
  4912. |\ footerr      |Headers and Footers      |Destination                      |
  4913. |\ footery      |Section Formatting       |Value                            |
  4914. |               |Properties               |                                 |
  4915. |\ footnote     |Footnotes                |Destination                      |
  4916. |\ formdisp *   |Document Formatting      |Flag                             |
  4917. |               |Properties               |                                 |
  4918. |\ formprot *   |Document Formatting      |Flag                             |
  4919. |               |Properties               |                                 |
  4920. |\ formshade *  |Document Formatting      |Flag                             |
  4921. |               |Properties               |                                 |
  4922. |\ fosnum *     |File Table               |Value                            |
  4923. |\ fprq *       |Font Table               |Value                            |
  4924. |\ fracwidth    |Document Formatting      |Flag                             |
  4925. |               |Properties               |                                 |
  4926. |\ frelative *  |File Table               |Value                            |
  4927. |\ froman       |Font Table               |Flag                             |
  4928. |\ fs           |Character Formatting     |Value                            |
  4929. |               |Properties               |                                 |
  4930. |\ fscript      |Font Table               |Flag                             |
  4931. |\ fswiss       |Font Table               |Flag                             |
  4932. |\ ftech        |Font Table               |Flag                             |
  4933. |\ ftnalt *     |Document Formatting      |Flag                             |
  4934. |               |Properties               |                                 |
  4935. |\ ftnbj        |Document Formatting      |Flag                             |
  4936. |               |Properties               |                                 |
  4937. |\ ftncn        |Document Formatting      |Destination                      |
  4938. |               |Properties               |                                 |
  4939. |\ ftnil        |Font Table               |Flag                             |
  4940. |\ ftnnalc *    |Document Formatting      |Flag                             |
  4941. |               |Properties               |                                 |
  4942. |\ ftnnar *     |Document Formatting      |Flag                             |
  4943. |               |Properties               |                                 |
  4944. |\ ftnnauc *    |Document Formatting      |Flag                             |
  4945. |               |Properties               |                                 |
  4946. |\ ftnnchi *    |Document Formatting      |Flag                             |
  4947. |               |Properties               |                                 |
  4948. |\ ftnnrlc *    |Document Formatting      |Flag                             |
  4949. |               |Properties               |                                 |
  4950. |\ ftnnruc *    |Document Formatting      |Flag                             |
  4951. |               |Properties               |                                 |
  4952. |\ ftnrestart   |Document Formatting      |Flag                             |
  4953. |               |Properties               |                                 |
  4954. |\ ftnrstcont * |Document Formatting      |Flag                             |
  4955. |               |Properties               |                                 |
  4956. |\ ftnrstpg *   |Document Formatting      |Flag                             |
  4957. |               |Properties               |                                 |
  4958. |\ ftnsep       |Document Formatting      |Destination                      |
  4959. |               |Properties               |                                 |
  4960. |\ ftnsepc      |Document Formatting      |Destination                      |
  4961. |               |Properties               |                                 |
  4962. |\ ftnstart     |Document Formatting      |Value                            |
  4963. |               |Properties               |                                 |
  4964. |\ ftntj        |Document Formatting      |Flag                             |
  4965. |               |Properties               |                                 |
  4966. |\ fttruetype   |Font Table               |Flag                             |
  4967. |\ fvaliddos *  |File Table               |Flag                             |
  4968. |\ fvalidhpfs * |File Table               |Flag                             |
  4969. |\ fvalidmac *  |File Table               |Flag                             |
  4970. |\ fvalidntfs * |File Table               |Flag                             |
  4971. |\ green        |Color Table              |Value                            |
  4972. |\ gutter       |Document Formatting      |Value                            |
  4973. |               |Properties               |                                 |
  4974. |\ guttersxn    |Section Formatting       |Value                            |
  4975. |               |Properties               |                                 |
  4976. |\ header       |Headers and Footers      |Destination                      |
  4977. |\ headerf      |Headers and Footers      |Destination                      |
  4978. |\ headerl      |Headers and Footers      |Destination                      |
  4979. |\ headerr      |Headers and Footers      |Destination                      |
  4980. |\ headery      |Section Formatting       |Value                            |
  4981. |               |Properties               |                                 |
  4982. |\ hr           |Information Group        |Value                            |
  4983. |\ hyphauto *   |Document Formatting      |Toggle                           |
  4984. |               |Properties               |                                 |
  4985. |\ hyphcaps *   |Document Formatting      |Toggle                           |
  4986. |               |Properties               |                                 |
  4987. |\ hyphconsec * |Document Formatting      |Value                            |
  4988. |               |Properties               |                                 |
  4989. |\ hyphhotz     |Document Formatting      |Value                            |
  4990. |               |Properties               |                                 |
  4991. |\ hyphpar *    |Paragraph Formatting     |Toggle                           |
  4992. |               |Properties               |                                 |
  4993. |\ i            |Character Formatting     |Toggle                           |
  4994. |               |Properties               |                                 |
  4995. |\ id           |Information Group        |Value                            |
  4996. |\ info         |Information Group        |Destination                      |
  4997. |\ intbl        |Paragraph Formatting     |Flag                             |
  4998. |               |Properties               |                                 |
  4999. |\ ixe          |Index Entries            |Flag                             |
  5000. |\ keep         |Paragraph Formatting     |Flag                             |
  5001. |               |Properties               |                                 |
  5002. |\ keepn        |Paragraph Formatting     |Flag                             |
  5003. |               |Properties               |                                 |
  5004. |\ kerning *    |Character Formatting     |Value                            |
  5005. |               |Properties               |                                 |
  5006. |\ keycode      |Style Sheet              |Destination                      |
  5007. |\ keywords     |Information Group        |Destination                      |
  5008. |\ landscape    |Document Formatting      |Flag                             |
  5009. |               |Properties               |                                 |
  5010. |\ lang         |Character Formatting     |Value                            |
  5011. |               |Properties               |                                 |
  5012. |\ ldblquote    |Special Characters       |Symbol                           |
  5013. |\ level        |Paragraph Formatting     |Value                            |
  5014. |               |Properties               |                                 |
  5015. |\ li           |Paragraph Formatting     |Value                            |
  5016. |               |Properties               |                                 |
  5017. |\ line         |Special Characters       |Symbol                           |
  5018. |\ linebetcol   |Section Formatting       |Flag                             |
  5019. |               |Properties               |                                 |
  5020. |\ linecont     |Section Formatting       |Flag                             |
  5021. |               |Properties               |                                 |
  5022. |\ linemod      |Section Formatting       |Value                            |
  5023. |               |Properties               |                                 |
  5024. |\ lineppage    |Section Formatting       |Flag                             |
  5025. |               |Properties               |                                 |
  5026. |\ linerestart  |Section Formatting       |Flag                             |
  5027. |               |Properties               |                                 |
  5028. |\ linestart    |Document Formatting      |Value                            |
  5029. |               |Properties               |                                 |
  5030. |\ linestarts   |Section Formatting       |Value                            |
  5031. |               |Properties               |                                 |
  5032. |\ linex        |Section Formatting       |Value                            |
  5033. |               |Properties               |                                 |
  5034. |\ linkself     |Objects                  |Flag                             |
  5035. |\ linkstyles * |Document Formatting      |Flag                             |
  5036. |               |Properties               |                                 |
  5037. |\ lndscpsxn    |Section Formatting       |Flag                             |
  5038. |               |Properties               |                                 |
  5039. |\ lquote       |Special Characters       |Symbol                           |
  5040. |\ ltrch        |Character Formatting     |Flag                             |
  5041. |               |Properties               |                                 |
  5042. |\ ltrdoc       |Document Formatting      |Flag                             |
  5043. |               |Properties               |                                 |
  5044. |\ ltrmark      |Special Characters       |Symbol                           |
  5045. |\ ltrpar       |Paragraph Formatting     |Flag                             |
  5046. |               |Properties               |                                 |
  5047. |\ ltrrow       |Table Definitions        |Flag                             |
  5048. |\ ltrsect      |Section Formatting       |Flag                             |
  5049. |               |Properties               |                                 |
  5050. |\ mac          |Character Set            |Flag                             |
  5051. |\ macpict      |Pictures                 |Flag                             |
  5052. |\ makebackup   |Document Formatting      |Flag                             |
  5053. |               |Properties               |                                 |
  5054. |\ margb        |Document Formatting      |Value                            |
  5055. |               |Properties               |                                 |
  5056. |\ margbsxn     |Section Formatting       |Value                            |
  5057. |               |Properties               |                                 |
  5058. |\ margl        |Document Formatting      |Value                            |
  5059. |               |Properties               |                                 |
  5060. |\ marglsxn     |Section Formatting       |Value                            |
  5061. |               |Properties               |                                 |
  5062. |\ margmirror   |Document Formatting      |Flag                             |
  5063. |               |Properties               |                                 |
  5064. |\ margr        |Document Formatting      |Value                            |
  5065. |               |Properties               |                                 |
  5066. |\ margrsxn     |Section Formatting       |Value                            |
  5067. |               |Properties               |                                 |
  5068. |\ margt        |Document Formatting      |Value                            |
  5069. |               |Properties               |                                 |
  5070. |\ margtsxn     |Section Formatting       |Value                            |
  5071. |               |Properties               |                                 |
  5072. |\ min          |Information Group        |Value                            |
  5073. |\ mo           |Information Group        |Value                            |
  5074. |\ nextfile     |Document Formatting      |Destination                      |
  5075. |               |Properties               |                                 |
  5076. |\ nocolbal *   |Document Formatting      |Flag                             |
  5077. |               |Properties               |                                 |
  5078. |\ noextrasprl *|Document Formatting      |Flag                             |
  5079. |               |Properties               |                                 |
  5080. |\ nofchars     |Information Group        |Value                            |
  5081. |\ nofpages     |Information Group        |Value                            |
  5082. |\ nofwords     |Information Group        |Value                            |
  5083. |\ noline       |Paragraph Formatting     |Flag                             |
  5084. |               |Properties               |                                 |
  5085. |\ nosupersub * |Character Formatting     |Flag                             |
  5086. |               |Properties               |                                 |
  5087. |\ notabind *   |Document Formatting      |Flag                             |
  5088. |               |Properties               |                                 |
  5089. |\ nowidctlpar *|Paragraph Formatting     |Flag                             |
  5090. |               |Properties               |                                 |
  5091. |\ nowrap       |Positioned Objects and   |Flag                             |
  5092. |               |Frames                   |                                 |
  5093. |\ objalias     |Objects                  |Destination                      |
  5094. |\ objalign     |Objects                  |Value                            |
  5095. |\ objautlink   |Objects                  |Flag                             |
  5096. |\ objclass     |Objects                  |Destination                      |
  5097. |\ objcropb     |Objects                  |Value                            |
  5098. |\ objcropl     |Objects                  |Value                            |
  5099. |\ objcropr     |Objects                  |Value                            |
  5100. |\ objcropt     |Objects                  |Value                            |
  5101. |\ objdata      |Objects                  |Destination                      |
  5102. |\ object       |Objects                  |Destination                      |
  5103. |\ objemb       |Objects                  |Flag                             |
  5104. |\ objh         |Objects                  |Value                            |
  5105. |\ objicemb     |Objects                  |Flag                             |
  5106. |\ objlink      |Objects                  |Flag                             |
  5107. |\ objlock      |Objects                  |Flag                             |
  5108. |\ objname      |Objects                  |Destination                      |
  5109. |\ objpub       |Objects                  |Flag                             |
  5110. |\ objscalex    |Objects                  |Value                            |
  5111. |\ objscaley    |Objects                  |Value                            |
  5112. |\ objsect      |Objects                  |Destination                      |
  5113. |\ objsetsize   |Objects                  |Flag                             |
  5114. |\ objsub       |Objects                  |Flag                             |
  5115. |\ objtime      |Objects                  |Destination                      |
  5116. |\ objtransy    |Objects                  |Value                            |
  5117. |\ objupdate *  |Objects                  |Flag                             |
  5118. |\ objw         |Objects                  |Value                            |
  5119. |\ operator     |Information Group        |Destination                      |
  5120. |\ otblrul *    |Document Formatting      |Flag                             |
  5121. |               |Properties               |                                 |
  5122. |\ outl         |Character Formatting     |Toggle                           |
  5123. |               |Properties               |                                 |
  5124. |\ page         |Special Characters       |Symbol                           |
  5125. |\ pagebb       |Paragraph Formatting     |Flag                             |
  5126. |               |Properties               |                                 |
  5127. |\ paperh       |Document Formatting      |Value                            |
  5128. |               |Properties               |                                 |
  5129. |\ paperw       |Document Formatting      |Value                            |
  5130. |               |Properties               |                                 |
  5131. |\ par          |Special Characters       |Symbol                           |
  5132. |\ pard         |Paragraph Formatting     |Flag                             |
  5133. |               |Properties               |                                 |
  5134. |\ pc           |Character Set            |Flag                             |
  5135. |\ pca          |Character Set            |Flag                             |
  5136. |\ pghsxn       |Section Formatting       |Value                            |
  5137. |               |Properties               |                                 |
  5138. |\ pgncont      |Section Formatting       |Flag                             |
  5139. |               |Properties               |                                 |
  5140. |\ pgndec       |Section Formatting       |Flag                             |
  5141. |               |Properties               |                                 |
  5142. |\ pgnhn *      |Section Formatting       |Value                            |
  5143. |               |Properties               |                                 |
  5144. |\ pgnhnsc *    |Section Formatting       |Flag                             |
  5145. |               |Properties               |                                 |
  5146. |\ pgnhnsh *    |Section Formatting       |Flag                             |
  5147. |               |Properties               |                                 |
  5148. |\ pgnhnsm *    |Section Formatting       |Flag                             |
  5149. |               |Properties               |                                 |
  5150. |\ pgnhnsn *    |Section Formatting       |Flag                             |
  5151. |               |Properties               |                                 |
  5152. |\ pgnhnsp *    |Section Formatting       |Flag                             |
  5153. |               |Properties               |                                 |
  5154. |\ pgnlcltr     |Section Formatting       |Flag                             |
  5155. |               |Properties               |                                 |
  5156. |\ pgnlcrm      |Section Formatting       |Flag                             |
  5157. |               |Properties               |                                 |
  5158. |\ pgnrestart   |Section Formatting       |Flag                             |
  5159. |               |Properties               |                                 |
  5160. |\ pgnstart     |Document Formatting      |Value                            |
  5161. |               |Properties               |                                 |
  5162. |\ pgnstarts    |Section Formatting       |Value                            |
  5163. |               |Properties               |                                 |
  5164. |\ pgnucltr     |Section Formatting       |Flag                             |
  5165. |               |Properties               |                                 |
  5166. |\ pgnucrm      |Section Formatting       |Flag                             |
  5167. |               |Properties               |                                 |
  5168. |\ pgnx         |Section Formatting       |Value                            |
  5169. |               |Properties               |                                 |
  5170. |\ pgny         |Section Formatting       |Value                            |
  5171. |               |Properties               |                                 |
  5172. |\ pgwsxn       |Section Formatting       |Value                            |
  5173. |               |Properties               |                                 |
  5174. |\ phcol        |Positioned Objects and   |Flag                             |
  5175. |               |Frames                   |                                 |
  5176. |\ phmrg        |Positioned Objects and   |Flag                             |
  5177. |               |Frames                   |                                 |
  5178. |\ phpg         |Positioned Objects and   |Flag                             |
  5179. |               |Frames                   |                                 |
  5180. |\ picbmp *     |Pictures                 |Flag                             |
  5181. |\ picbpp *     |Pictures                 |Value                            |
  5182. |\ piccropb     |Pictures                 |Value                            |
  5183. |\ piccropl     |Pictures                 |Value                            |
  5184. |\ piccropr     |Pictures                 |Value                            |
  5185. |\ piccropt     |Pictures                 |Value                            |
  5186. |\ pich         |Pictures                 |Value                            |
  5187. |\ pichgoal     |Pictures                 |Value                            |
  5188. |\ picscaled    |Pictures                 |Flag                             |
  5189. |\ picscalex    |Pictures                 |Value                            |
  5190. |\ picscaley    |Pictures                 |Value                            |
  5191. |\ pict         |Pictures                 |Destination                      |
  5192. |\ picw         |Pictures                 |Value                            |
  5193. |\ picwgoal     |Pictures                 |Value                            |
  5194. |\ plain        |Character Formatting     |Flag                             |
  5195. |               |Properties               |                                 |
  5196. |\ pmmetafile   |Pictures                 |Value                            |
  5197. |\ pn *         |Bullets and Numbering    |Destination                      |
  5198. |\ pnacross *   |Bullets and Numbering    |Flag                             |
  5199. |\ pnb *        |Bullets and Numbering    |Toggle                           |
  5200. |\ pncaps *     |Bullets and Numbering    |Toggle                           |
  5201. |\ pncard *     |Bullets and Numbering    |Flag                             |
  5202. |\ pncf *       |Bullets and Numbering    |Value                            |
  5203. |\ pndec *      |Bullets and Numbering    |Flag                             |
  5204. |\ pnf *        |Bullets and Numbering    |Value                            |
  5205. |\ pnfs *       |Bullets and Numbering    |Value                            |
  5206. |\ pnhang *     |Bullets and Numbering    |Flag                             |
  5207. |\ pni *        |Bullets and Numbering    |Toggle                           |
  5208. |\ pnindent *   |Bullets and Numbering    |Value                            |
  5209. |\ pnlcltr *    |Bullets and Numbering    |Flag                             |
  5210. |\ pnlcrm *     |Bullets and Numbering    |Flag                             |
  5211. |\ pnlvl *      |Bullets and Numbering    |Value                            |
  5212. |\ pnlvlblt *   |Bullets and Numbering    |Flag                             |
  5213. |\ pnlvlbody *  |Bullets and Numbering    |Flag                             |
  5214. |\ pnlvlcont *  |Bullets and Numbering    |Flag                             |
  5215. |\ pnnumonce *  |Bullets and Numbering    |Flag                             |
  5216. |\ pnord *      |Bullets and Numbering    |Flag                             |
  5217. |\ pnordt *     |Bullets and Numbering    |Flag                             |
  5218. |\ pnprev *     |Bullets and Numbering    |Flag                             |
  5219. |\ pnqc *       |Bullets and Numbering    |Flag                             |
  5220. |\ pnql *       |Bullets and Numbering    |Flag                             |
  5221. |\ pnqr *       |Bullets and Numbering    |Flag                             |
  5222. |\ pnrestart *  |Bullets and Numbering    |Flag                             |
  5223. |\ pnscaps *    |Bullets and Numbering    |Toggle                           |
  5224. |\ pnseclvl *   |Bullets and Numbering    |Destination                      |
  5225. |\ pnsp *       |Bullets and Numbering    |Value                            |
  5226. |\ pnstart *    |Bullets and Numbering    |Value                            |
  5227. |\ pnstrike *   |Bullets and Numbering    |Toggle                           |
  5228. |\ pntext *     |Bullets and Numbering    |Destination                      |
  5229. |\ pntxta *     |Bullets and Numbering    |Destination                      |
  5230. |\ pntxtb *     |Bullets and Numbering    |Destination                      |
  5231. |\ pnucltr *    |Bullets and Numbering    |Flag                             |
  5232. |\ pnucrm *     |Bullets and Numbering    |Flag                             |
  5233. |\ pnul *       |Bullets and Numbering    |Toggle                           |
  5234. |\ pnuld *      |Bullets and Numbering    |Flag                             |
  5235. |\ pnuldb *     |Bullets and Numbering    |Flag                             |
  5236. |\ pnulnone *   |Bullets and Numbering    |Flag                             |
  5237. |\ pnulw *      |Bullets and Numbering    |Flag                             |
  5238. |\ posnegx *    |Positioned Objects and   |Value                            |
  5239. |               |Frames                   |                                 |
  5240. |\ posnegy *    |Positioned Objects and   |Value                            |
  5241. |               |Frames                   |                                 |
  5242. |\ posx         |Positioned Objects and   |Value                            |
  5243. |               |Frames                   |                                 |
  5244. |\ posxc        |Positioned Objects and   |Flag                             |
  5245. |               |Frames                   |                                 |
  5246. |\ posxi        |Positioned Objects and   |Flag                             |
  5247. |               |Frames                   |                                 |
  5248. |\ posxl        |Positioned Objects and   |Flag                             |
  5249. |               |Frames                   |                                 |
  5250. |\ posxo        |Positioned Objects and   |Flag                             |
  5251. |               |Frames                   |                                 |
  5252. |\ posxr        |Positioned Objects and   |Flag                             |
  5253. |               |Frames                   |                                 |
  5254. |\ posy         |Positioned Objects and   |Value                            |
  5255. |               |Frames                   |                                 |
  5256. |\ posyb        |Positioned Objects and   |Flag                             |
  5257. |               |Frames                   |                                 |
  5258. |\ posyc        |Positioned Objects and   |Flag                             |
  5259. |               |Frames                   |                                 |
  5260. |\ posyil       |Positioned Objects and   |Flag                             |
  5261. |               |Frames                   |                                 |
  5262. |\ posyt        |Positioned Objects and   |Flag                             |
  5263. |               |Frames                   |                                 |
  5264. |\ prcolbl *    |Document Formatting      |Flag                             |
  5265. |               |Properties               |                                 |
  5266. |\ printdata *  |Document Formatting      |Flag                             |
  5267. |               |Properties               |                                 |
  5268. |\ printim      |Information Group        |Destination                      |
  5269. |\ psover       |Document Formatting      |Flag                             |
  5270. |               |Properties               |                                 |
  5271. |\ psz *        |Document Formatting      |Value                            |
  5272. |               |Properties               |                                 |
  5273. |\ pubauto      |Macintosh Edition Manager|Flag                             |
  5274. |               |Publisher Objects        |                                 |
  5275. |\ pvmrg        |Positioned Objects and   |Flag                             |
  5276. |               |Frames                   |                                 |
  5277. |\ pvpara       |Positioned Objects and   |Flag                             |
  5278. |               |Frames                   |                                 |
  5279. |\ pvpg         |Positioned Objects and   |Flag                             |
  5280. |               |Frames                   |                                 |
  5281. |\ qc           |Paragraph Formatting     |Flag                             |
  5282. |               |Properties               |                                 |
  5283. |\ qj           |Paragraph Formatting     |Flag                             |
  5284. |               |Properties               |                                 |
  5285. |\ ql           |Paragraph Formatting     |Flag                             |
  5286. |               |Properties               |                                 |
  5287. |\ qr           |Paragraph Formatting     |Flag                             |
  5288. |               |Properties               |                                 |
  5289. |\ rdblquote    |Special Characters       |Symbol                           |
  5290. |\ red          |Color Table              |Value                            |
  5291. |\ result       |Objects                  |Destination                      |
  5292. |\ revauth *    |Character Formatting     |Value                            |
  5293. |               |Properties               |                                 |
  5294. |\ revbar       |Document Formatting      |Value                            |
  5295. |               |Properties               |                                 |
  5296. |\ revdttm *    |Character Formatting     |Value                            |
  5297. |               |Properties               |                                 |
  5298. |\ revised      |Character Formatting     |Toggle                           |
  5299. |               |Properties               |                                 |
  5300. |\ revisions    |Document Formatting      |Flag                             |
  5301. |               |Properties               |                                 |
  5302. |\ revprop      |Document Formatting      |Value                            |
  5303. |               |Properties               |                                 |
  5304. |\ revprot *    |Document Formatting      |Flag                             |
  5305. |               |Properties               |                                 |
  5306. |\ revtbl *     |Revision Marks           |Destination                      |
  5307. |\ revtim       |Information Group        |Destination                      |
  5308. |\ ri           |Paragraph Formatting     |Value                            |
  5309. |               |Properties               |                                 |
  5310. |\ row          |Special Characters       |Symbol                           |
  5311. |\ rquote       |Special Characters       |Symbol                           |
  5312. |\ rsltbmp      |Objects                  |Flag                             |
  5313. |\ rsltmerge    |Objects                  |Flag                             |
  5314. |\ rsltpict     |Objects                  |Flag                             |
  5315. |\ rsltrtf      |Objects                  |Flag                             |
  5316. |\ rslttxt      |Objects                  |Flag                             |
  5317. |\ rtf          |RTF Version              |Destination                      |
  5318. |\ rtlch        |Character Formatting     |Flag                             |
  5319. |               |Properties               |                                 |
  5320. |\ rtldoc       |Document Formatting      |Flag                             |
  5321. |               |Properties               |                                 |
  5322. |\ rtlmark      |Bidirectional Language   |Symbol                           |
  5323. |               |Support and Special      |                                 |
  5324. |               |Characters               |                                 |
  5325. |\ rtlpar       |Paragraph Formatting     |Flag                             |
  5326. |               |Properties               |                                 |
  5327. |\ rtlrow       |Table Definitions        |Flag                             |
  5328. |\ rtlsect      |Section Formatting       |Flag                             |
  5329. |               |Properties               |                                 |
  5330. |\ rxe          |Index Entries            |Destination                      |
  5331. |\ s            |Paragraph Formatting     |Value                            |
  5332. |               |Properties               |                                 |
  5333. |\ sa           |Paragraph Formatting     |Value                            |
  5334. |               |Properties               |                                 |
  5335. |\ sb           |Paragraph Formatting     |Value                            |
  5336. |               |Properties               |                                 |
  5337. |\ sbasedon     |Style Sheet              |Value                            |
  5338. |\ sbkcol       |Section Formatting       |Flag                             |
  5339. |               |Properties               |                                 |
  5340. |\ sbkeven      |Section Formatting       |Flag                             |
  5341. |               |Properties               |                                 |
  5342. |\ sbknone      |Section Formatting       |Flag                             |
  5343. |               |Properties               |                                 |
  5344. |\ sbkodd       |Section Formatting       |Flag                             |
  5345. |               |Properties               |                                 |
  5346. |\ sbkpage      |Section Formatting       |Flag                             |
  5347. |               |Properties               |                                 |
  5348. |\ sbys         |Paragraph Formatting     |Flag                             |
  5349. |               |Properties               |                                 |
  5350. |\ scaps        |Character Formatting     |Toggle                           |
  5351. |               |Properties               |                                 |
  5352. |\ sec          |Information Group        |Value                            |
  5353. |\ sect         |Special Characters       |Symbol                           |
  5354. |\ sectd        |Section Formatting       |Flag                             |
  5355. |               |Properties               |                                 |
  5356. |\ sectnum      |Special Characters       |Symbol                           |
  5357. |\ sectunlocked |Section Formatting       |Flag                             |
  5358. |*              |Properties               |                                 |
  5359. |\ shad         |Character Formatting     |Toggle                           |
  5360. |               |Properties               |                                 |
  5361. |\ shading      |Paragraph Shading        |Value                            |
  5362. |\ shift        |Style Sheet              |Flag                             |
  5363. |\ sl           |Paragraph Formatting     |Value                            |
  5364. |               |Properties               |                                 |
  5365. |\ slmult *     |Paragraph Formatting     |Value                            |
  5366. |               |Properties               |                                 |
  5367. |\ snext        |Style Sheet              |Value                            |
  5368. |\ softcol *    |Special Characters       |Flag                             |
  5369. |\ softlheight *|Special Characters       |Value                            |
  5370. |\ softline *   |Special Characters       |Flag                             |
  5371. |\ softpage *   |Special Characters       |Flag                             |
  5372. |\ sprsspbf *   |Document Formatting      |Flag                             |
  5373. |               |Properties               |                                 |
  5374. |\ sprstsp *    |Document Formatting      |Flag                             |
  5375. |               |Properties               |                                 |
  5376. |\ strike       |Character Formatting     |Toggle                           |
  5377. |               |Properties               |                                 |
  5378. |\ stylesheet   |Style Sheet              |Destination                      |
  5379. |\ sub *        |Character Formatting     |Flag                             |
  5380. |               |Properties               |                                 |
  5381. |\ subdocument *|Paragraph Formatting     |Value                            |
  5382. |               |Properties               |                                 |
  5383. |\ subject      |Information Group        |Destination                      |
  5384. |\ super *      |Character Formatting     |Flag                             |
  5385. |               |Properties               |                                 |
  5386. |\ swpbdr *     |Document Formatting      |Flag                             |
  5387. |               |Properties               |                                 |
  5388. |\ tab          |Special Characters       |Symbol                           |
  5389. |\ tb           |Tabs                     |Value                            |
  5390. |\ tc           |Table of Contents Entries|Destination                      |
  5391. |\ tcf          |Table of Contents Entries|Value                            |
  5392. |\ tcl          |Table of Contents Entries|Value                            |
  5393. |\ tcn *        |Table of Contents Entries|Flag                             |
  5394. |\ template     |Document Formatting      |Destination                      |
  5395. |               |Properties               |                                 |
  5396. |\ title        |Information Group        |Destination                      |
  5397. |\ titlepg      |Section Formatting       |Flag                             |
  5398. |               |Properties               |                                 |
  5399. |\ tldot        |Tabs                     |Flag                             |
  5400. |\ tleq         |Tabs                     |Flag                             |
  5401. |\ tlhyph       |Tabs                     |Flag                             |
  5402. |\ tlth         |Tabs                     |Flag                             |
  5403. |\ tlul         |Tabs                     |Flag                             |
  5404. |\ tqc          |Tabs                     |Flag                             |
  5405. |\ tqdec        |Tabs                     |Flag                             |
  5406. |\ tqr          |Tabs                     |Flag                             |
  5407. |\ transmf *    |Document Formatting      |Flag                             |
  5408. |               |Properties               |                                 |
  5409. |\ trbrdrb *    |Table Definitions        |Flag                             |
  5410. |\ trbrdrh *    |Table Definitions        |Flag                             |
  5411. |\ trbrdrl *    |Table Definitions        |Flag                             |
  5412. |\ trbrdrr *    |Table Definitions        |Flag                             |
  5413. |\ trbrdrt *    |Table Definitions        |Flag                             |
  5414. |\ trbrdrv *    |Table Definitions        |Flag                             |
  5415. |\ trgaph       |Table Definitions        |Value                            |
  5416. |\ trhdr *      |Table Definitions        |Flag                             |
  5417. |\ trkeep *     |Table Definitions        |Flag                             |
  5418. |\ trleft       |Table Definitions        |Value                            |
  5419. |\ trowd        |Table Definitions        |Flag                             |
  5420. |\ trqc         |Table Definitions        |Flag                             |
  5421. |\ trql         |Table Definitions        |Flag                             |
  5422. |\ trqr         |Table Definitions        |Flag                             |
  5423. |\ trrh         |Table Definitions        |Value                            |
  5424. |\ tx           |Tabs                     |Value                            |
  5425. |\ txe          |Index Entries            |Destination                      |
  5426. |\ ul           |Character Formatting     |Toggle                           |
  5427. |               |Properties               |                                 |
  5428. |\ uld          |Character Formatting     |Flag                             |
  5429. |               |Properties               |                                 |
  5430. |\ uldb         |Character Formatting     |Flag                             |
  5431. |               |Properties               |                                 |
  5432. |\ ulnone       |Character Formatting     |Flag                             |
  5433. |               |Properties               |                                 |
  5434. |\ ulw          |Character Formatting     |Flag                             |
  5435. |               |Properties               |                                 |
  5436. |\ up           |Character Formatting     |Value                            |
  5437. |               |Properties               |                                 |
  5438. |\ v            |Character Formatting     |Toggle                           |
  5439. |               |Properties               |                                 |
  5440. |\ vern         |Information Group        |Value                            |
  5441. |\ version      |Information Group        |Value                            |
  5442. |\ vertalb      |Section Formatting       |Flag                             |
  5443. |               |Properties               |                                 |
  5444. |\ vertalc      |Section Formatting       |Flag                             |
  5445. |               |Properties               |                                 |
  5446. |\ vertalj      |Section Formatting       |Flag                             |
  5447. |               |Properties               |                                 |
  5448. |\ vertalt      |Section Formatting       |Flag                             |
  5449. |               |Properties               |                                 |
  5450. |\ wbitmap      |Pictures                 |Value                            |
  5451. |\ wbmbitspixel |Pictures                 |Value                            |
  5452. |\ wbmplanes    |Pictures                 |Value                            |
  5453. |\ wbmwidthbytes|Pictures                 |Value                            |
  5454. |\ widowctrl    |Document Formatting      |Flag                             |
  5455. |               |Properties               |                                 |
  5456. |\ wmetafile    |Pictures                 |Value                            |
  5457. |\ wraptrsp *   |Document Formatting      |Flag                             |
  5458. |               |Properties               |                                 |
  5459. |\ xe           |Index Entries            |Destination                      |
  5460. |\ xef *        |Index Entries            |Value                            |
  5461. |\ yr           |Information Group        |Value                            |
  5462. |\ zwj          |Special Characters       |Symbol                           |
  5463. |\ zwnj         |Special Characters       |Symbol                           |
  5464.  
  5465.  
  5466.  
  5467.  
  5468.